Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
 |  |
[C++] Что мешает 08.04.03 06:02 Число просмотров: 1289
Автор: alien <Андрей> Статус: Member
|
Ну а если используешь классы строк (например AnsiString), то вообще проблем нет:
int n = 12345;
AnsiString s;
s = n; // !!! преобразование происходит автоматически !!!
|
|
<programming>
|
[C++] Хочу из строки получить число... 07.04.03 13:10
Автор: wade Статус: Незарегистрированный пользователь
|
В Delphi есть функции IntToStr() и StrToInt(), которые преобразуют число в строку и строку в число. Есть ли аналогичные функции в C++ ?
Пасиб!
|
 |
[C++] Что мешает 07.04.03 14:26
Автор: amirul <Serge> Статус: The Elderman
|
> В Delphi есть функции IntToStr() и StrToInt(), которые > преобразуют число в строку и строку в число. Есть ли > аналогичные функции в C++ ? > Пасиб!
Для перегона из строки в число подключай stdlib.h и юзай atoi, atol, atof и иже с ними или strtol, strtod и т.д.
Ну а чтоб перегонять число в строку лучше sprintf не найдешь
|
 |  |
[C++] Что мешает 08.04.03 06:02
Автор: alien <Андрей> Статус: Member
|
Ну а если используешь классы строк (например AnsiString), то вообще проблем нет:
int n = 12345;
AnsiString s;
s = n; // !!! преобразование происходит автоматически !!!
|
 |  |  |
[C++] Что мешает 08.04.03 07:54
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> > int n = 12345;
> AnsiString s;
> s = n; // !!! преобразование происходит автоматически !!!
>
Ну если из строки в число то AnsiString вообще рулит:
AnsiString s=15;
int n=s.ToInt(); //будет исключение при кривой строке
int m=s.ToIntDef(0); //исключения не будет. Будет 0
float k=s.ToDouble();//ну ясно
и еще чтото там есть....
Единственное - atoi, itoa, sprintf меньше занимают и быстрее работают.
|
 |  |  |  |
[C++] Наивный вопрос. 08.04.03 15:21
Автор: Ktirf <Æ Rusakov> Статус: Elderman Отредактировано 08.04.03 15:24 Количество правок: 3
|
А что делает вышеупомянутый AnsiString, если я напишу так:
char t;
// ...
AnsiString s1 = t;
AnsiString s2 = (int) t;
То есть я догадываюсь об ответе, но хотелось бы знать наверняка.
Если char считается символом, то следующий код работает несколько неожиданно:
template <class N>
AnsiString NumberToString(N n)
{
return n;
}
// ...
for (char t = 1; t < 8; ++t)
printf("%s\n", (const char *) NumberToString(t));
Я знаю, что использование char в качестве счетчика - не слишком хорошая идея, тем не менее, передавая char в функцию NumberToString, я все же ожидаю, что он будет оттрактован как число. Но вместо чисел я получу несколько непонятных символов, сопровождающихся эффектным писком в конце.
Если же char в самом верхнем вопросе считается числом, то следующие две записи неравнозначны, что тоже довольно неожиданно:
AnsiString s1 = "c";
AnsiString s2 = 'c';
И то, и другое компилируется, но отловить такую ошибку будет мудрено.
В свете всего вышесказанного я согласен с amirul'ом и предпочитаю семейство atox/strtox. Ну и sprintf для печати, есесно :) Это все, кстати, не вылезая из чистого C.
|
 |  |  |  |  |
[C++] Наивный вопрос. 08.04.03 15:43
Автор: Killer{R} <Dmitry> Статус: Elderman Отредактировано 08.04.03 15:45 Количество правок: 1
|
> А что делает вышеупомянутый AnsiString, если я напишу так: > > char t;
> // ...
> AnsiString s1 = t;
> AnsiString s2 = (int) t;
>
s1 = символ с кодом t
s2 = строковое представление числа t
> То есть я догадываюсь об ответе, но хотелось бы знать > наверняка. > Если char считается символом, то следующий код работает > несколько неожиданно: > > template <class N>
> AnsiString NumberToString(N n)
> {
> return n;
> }
> // ...
> for (char t = 1; t < 8; ++t)
> printf("%s\n", (const char *) NumberToString(t));
>
> Я знаю, что использование char в качестве счетчика - не > слишком хорошая идея, тем не менее, передавая char в > функцию NumberToString, я все же ожидаю, > что он будет оттрактован как число. Но вместо чисел я > получу несколько непонятных символов, сопровождающихся > эффектным писком в конце. он будет оттрактован как символ. хочешь число - явно преобразовывай типы или юзай unsigned char.
> Если же char в самом верхнем вопросе считается числом, то > следующие две записи неравнозначны, что тоже довольно > неожиданно: > > AnsiString s1 = "c";
> AnsiString s2 = 'c';
>
> И то, и другое компилируется, но отловить такую ошибку > будет мудрено.
> В свете всего вышесказанного я согласен с amirul'ом и > предпочитаю семейство atox/strtox. Ну и sprintf для печати, > есесно :) Это все, кстати, не вылезая из чистого C. ну да, тока ансистринг удобнее
|
 |  |  |  |  |  |
[C++] Может быть, он и удобнее, но я предпочитаю std::string, в частности из-за отсутствия таких вот ударов из-за угла. 08.04.03 19:16
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
|
|
|
|