Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2012, 13:24   #1
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
Печаль Массив из сhar в int

Здравствуйте. Помогите пожалуйста преобразовать char massiv[1000] = "263951" в int, чтоб работать дальше как с числом. Без использования функции atoi.

Последний раз редактировалось Arrioh; 29.03.2012 в 15:44.
Arrioh вне форума Ответить с цитированием
Старый 29.03.2012, 17:24   #2
Vadim_rush
Пользователь
 
Регистрация: 29.03.2012
Сообщений: 18
По умолчанию В делфи

Floattoint

Последний раз редактировалось Vadim_rush; 29.03.2012 в 17:25. Причина: ошибся
Vadim_rush вне форума Ответить с цитированием
Старый 29.03.2012, 18:49   #3
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Ну сделай так:
В "s" твоя строка, в "i" - результат(число).
Код:
i:=1; // можешь присвоить любое число, кроме нуля. Нуль запишется в i, если строка была пустая.
asm
          xor     eax,eax //обнуляем регистр eax
          mov     esi,[s] // в регистр esi заносим указатель на строку
  @strTOdec:           // метка, на которую будем переходить
          movsx   ebx,byte [esi] //в ebx заносим один байт(символ из строки)
          sub     bl,'0' // из регистра bl(часть ebx) вычитаем 48
          cmp     bl,10 // сравниваем bl с 10 
          jnb     @end // и если больше 10, то значит символ оказался не цифрой и прыгаем на метку
          // end
          imul    eax,10 // умножаем eax на 10 для того, чтобы вписать новое число в конец
          add     eax,ebx// складываем новое число(ebx) с уже имеющимся(eax)
          inc     esi // увеличить esi на единицу, чтобы считать новый символ
          jmp     @strTOdec // перепрыгиваем на метку 
  @end: // метка окончания перевода строки
          mov     i,eax // занести в переменную i содержимое регистра eax
end;
if i<>0 then showmessage('строка переведена в число');
Если помог, проси поставить минус. Будь оригинален!

Последний раз редактировалось Rin; 29.03.2012 в 19:37.
Rin вне форума Ответить с цитированием
Старый 29.03.2012, 19:10   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Ну сделай так:
В "s" твоя строка, в "i" - результат(число).
Код:
хохохохо
Rin,Ну вы жжёте!
асм круто, но наврятли тс что-то понял!


Мб проще для тс брать код символа и отнимать 48 и будет кул
как-то так
Код:
num = 0;
for (int i = 0; i < dlinachisla; i++)

    num += int(mas[i] - 48)*pow(10, dlinachisla - i - 1);
ну как вот так, учитывая что кодировочная таблица ASCII
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 29.03.2012, 19:24   #5
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

Да там же ничего сложного :D.
Но для него и в правду Ваш способ будет проще объяснить.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 29.03.2012, 21:24   #6
Крот
Пользователь
 
Регистрация: 15.03.2012
Сообщений: 57
По умолчанию

Hacker19_90 А почему в этой строчке
Код:
num += int(mas[i] - 48)*pow(10, dlinachisla - i - 1);
ошибка выскакивает error C2668: pow: неоднозначный вызов перегруженной функции ?
Крот вне форума Ответить с цитированием
Старый 29.03.2012, 21:29   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Потому что написано с потолка и здесь кое-чего не хватает!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 29.03.2012, 22:06   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Господа, все еще проще:
Код:
	char massiv[1000] = "263951";
	int n=0;
	for(int i=0;massiv[i];i++) n=n*10+(massiv[i]-'0');
	printf("%d",n);
	getchar();
Не забывайте что символы в Си это те же числа.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.03.2012, 12:05   #9
Arrioh
Пользователь
 
Регистрация: 25.03.2012
Сообщений: 60
По умолчанию

Всем спасибо. На примере С действительно понятнее)
Arrioh вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция float average(int arrray[],int from,int to) yuliyayuliya Помощь студентам 0 25.04.2011 21:55
Массив int в clr 0479 Общие вопросы C/C++ 0 26.11.2010 20:19
Char строку в int массив (C) Ael Общие вопросы C/C++ 6 06.11.2010 00:22
Перевести сhar в integer Ckomoroh Общие вопросы Delphi 10 12.12.2009 17:25
Булевый массив в int Molotoff Общие вопросы C/C++ 5 07.05.2009 12:04