Как перевести строку в число?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
zhenek
Сообщения: 4
Зарегистрирован: 20 мар 2009, 18:01

02 апр 2009, 20:01

Пишу сейчас класс и по условию задачи возникла потребность создания конструктора, который в качестве параметра принимает строку вида: "число:число:число". Данную строку надо перегнать в три значения для численных переменных... Как сделать, сообразить не могу. Заранее спасибо за помощь.
Аватара пользователя
WinMain
Сообщения: 913
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

02 апр 2009, 20:53

Если тебе надо время из строки в число перегнать, то в Visual C++ есть класс COleDateTime, у которого есть метод ParseDateTime.
atavin-ta
Сообщения: 572
Зарегистрирован: 30 янв 2009, 06:38

03 апр 2009, 08:25

Можно разобрать строку на подстроки-числа, а их - на цмфры, потом определи значения цифр вычитанием символа '0' из каждой цифры и сложы эти значения с весами. Вес крайней правой цифры числа всегда единица, а каждой левой в основание системы больше. Если система десятичная, то в десять раз. Для систем с большими основаниями придётся менять алгоритм перевода цифры в её значение. Один из возможных вариантов - табличный перевод каждой цифры в её значения. Кроме того, существуют готовые стандартные функции перевода сроки в число. Например. в borland с++е перевод десятичной строки в целое [syntax=C++] StrToInt(s:AnsiString) [/syntax].
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

03 апр 2009, 09:34

atoi - это не то?
Правда, в C-шных функциях перевода, в отличие от ф-й Pascal, мне не очень нравится то, что нельзя понять, есть ли во входной строке нецифровые символы. Т.е. atoi никак не сигнализирует об ошибке, выдавая в результате число, полученноен при преобразовании до первого ошибочного символа.


Есть еще strol. Она в т.ч. возвращает указатель на символ, на котором закончилось преобразование. Я пытался понять, есть ли во входной строке некорректные символы, анализирую значение этого указателя. По идее, если преобразована вся строка целиком, то он должен указывать "за конец строки", т.е. на символ 'x00'. Либо брать разность этого указателя и указателя на начало строки, если преобразована вся строка, то эта разность должна равняться значению lstrlen для исходной строки.
Ответить