информационная безопасность
без паники и всерьез
 подробно о проекте
Spanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле ЛевинаГде водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Chainalysis раскрыла взлом собственных... 
 SMS of Death для Android 
 Исследователи Anthropic продемонстрировали... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[C++] Наивный вопрос. 08.04.03 15:43  Число просмотров: 1386
Автор: 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.
ну да, тока ансистринг удобнее
<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
<"чистая" ссылка>
1





Рейтинг@Mail.ru


  Copyright © 2001-2026 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach