Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > преобразование типов |
Автор: irvis 21.6.2006, 09:24 | ||
у меня есть массив символов из него надо получить число. как? например: строка "7899" мне надо получить число 7899 вот кусок кода из моей програмки
вот str1 этот массив символов, как мне теперь получить число? stroka[i] это вводима строка, она должна быть именно строкой |
Автор: MAKCim 21.6.2006, 09:32 | ||
atoi(str1)? Добавлено @ 09:35 или самому написать
|
Автор: irvis 21.6.2006, 09:43 |
я не знаю что такое unsigned и не понимаю (str[i]-48) что за число 48? |
Автор: MAKCim 21.6.2006, 10:14 | ||||
книги читай
48 - код '0', соответственно str[i]-48 - числовой эквивалент символа из '0'...'9' |
Автор: irvis 21.6.2006, 10:17 |
спасибо! |
Автор: Athlon 21.6.2006, 10:23 | ||||||
попробуй перевести с английского ![]()
Как известно в таблице ASCII цифры 0..9 расположены последовательно, число 48 (0х30) - положение нуля в таблице ASCII т.е. строчка
инициализирует num номером символа str[i] в таблице ASCII, и чтобы получить значение соответствующей цифры, тебе нужно скоректировать этот номер на 48 (0х30). |
Автор: sergejzr 21.6.2006, 10:28 | ||
MAKCim, пиши лучше сразу str[i]-'0' irvis, вот тебе кусочек кода с проверками и всем, чем нужно ![]()
|
Автор: MAKCim 21.6.2006, 17:05 | ||
разница? ![]() |
Автор: sergejzr 21.6.2006, 17:18 |
1) Вопросов, что такое 48 не возникнет 2) Всё конечно ASCII, но не факт, что везде 3) Логичнее и понятнее, чем запоминать цифры. |
Автор: MAKCim 21.6.2006, 17:23 |
sergej.z учту ![]() |
Автор: EvgenZ 16.9.2006, 16:28 |
А как лучше сделать, чтобы char содержащий двоичное число (101010101001) можно было инрементировать, складывать и т.д. Переводить его в инт, делать что-то и опять перводить в char? |
Автор: SparF 16.9.2006, 16:38 |
Очень удобно в этом случае использовать функции sscanf() и sprintf() один из самых больших плюсов - предоставляемые ими шаблоны форматной строки. |
Автор: EvgenZ 16.9.2006, 16:45 |
SparF, ![]() |
Автор: SparF 16.9.2006, 16:53 | ||
Example.
Output: Benny -> 29 Если признаться, то самому было влом писать, пример взят из http://www.cplusplus.com/ref/cstdio/sscanf.html sprintf() работает также как и обычный printf(), только вывод - в строку |
Автор: EvgenZ 16.9.2006, 16:58 |
хм насколько я понял получается тотже atoi (перевод из char в int) ? Или я не понял соли? |
Автор: SparF 16.9.2006, 17:11 | ||
Только с более широкими возможностями: + сама строка может включать не только цифры, а может быть абс любой строкой - применяй ты atoi в вышеизложенном примере - пришлось бы сначала из длинной строки "Benny is 29 years old" выделить "29" + именяется формат входных данных - форматную строку переписал и забыл ), а в случае с atoi придется повозиться с кодом выделения подстроки ("29" в нашем случае) - тоже ничего сложного, но все же лишний труд и лишние ошибки) * в случае, когда работаешь уже с выделенной подстрокой и надо взять только одно значение, то разница, конечно, теряется..... *кроме того переводить не обязательно только в int (сходи по ссылке, которую я указал, там полное описание ![]() ![]() |
Автор: EvgenZ 16.9.2006, 18:05 |
Я заходил, спасбио за полезную и интеерсную информацию, но в данном конкретном случае нужен С++. Что-то я похоже передумал сегодня не могу понять работу itoa: char num[10]; std::cout << "vvedi dvoi4noe 4islo\n"; std::cin >> num; int n = atoi(num); n+=5; num = itoa(int XXX, char* YYY, int ZZZ); // ??? вот тут не догоняю, как назад в чар забахать? что такое ХХХ YYY ZZZ ? |
Автор: Daevaorn 16.9.2006, 18:42 | ||
С++, так С++:
|
Автор: EvgenZ 16.9.2006, 19:29 |
а можно с помощью itoa объяснить? |
Автор: EvgenZ 16.9.2006, 19:45 |
Всем огомное спасибо, поставьте пожалуйста Daevaorn, и Romikgy, + ![]() |
Автор: Romikgy 16.9.2006, 19:50 |
EvgenZ, поднимишся выше 100 постов, сам поставишь если не забудешь ![]() Удачи в программировании ![]() |