| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 постов, сам поставишь если не забудешь Удачи в программировании |