Страница 1 из 1

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

Добавлено: 02 апр 2009, 20:01
zhenek
Пишу сейчас класс и по условию задачи возникла потребность создания конструктора, который в качестве параметра принимает строку вида: "число:число:число". Данную строку надо перегнать в три значения для численных переменных... Как сделать, сообразить не могу. Заранее спасибо за помощь.

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

Добавлено: 02 апр 2009, 20:53
WinMain
Если тебе надо время из строки в число перегнать, то в Visual C++ есть класс COleDateTime, у которого есть метод ParseDateTime.

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

Добавлено: 03 апр 2009, 08:25
atavin-ta
Можно разобрать строку на подстроки-числа, а их - на цмфры, потом определи значения цифр вычитанием символа '0' из каждой цифры и сложы эти значения с весами. Вес крайней правой цифры числа всегда единица, а каждой левой в основание системы больше. Если система десятичная, то в десять раз. Для систем с большими основаниями придётся менять алгоритм перевода цифры в её значение. Один из возможных вариантов - табличный перевод каждой цифры в её значения. Кроме того, существуют готовые стандартные функции перевода сроки в число. Например. в borland с++е перевод десятичной строки в целое [syntax=C++] StrToInt(s:AnsiString) [/syntax].

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

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


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