Блог пользователя iSlava

Автор iSlava, 11 лет назад, По-русски

Уже неоднократно встречался с проблемой перевода числа в строку и наоборот в С++. Мне было бы интересно перевод как в string так и в *char[]. Знаю можно поразрядно переводить,но все же интересно. Делитесь своими способами перевода.(Желательно указать библиотеки и параметры которые принимает та или иная функция или процедура ).

  • Проголосовать: нравится
  • +9
  • Проголосовать: не нравится

»
11 лет назад, # |
Rev. 3   Проголосовать: нравится +11 Проголосовать: не нравится

Числа в строку можно превращать через stringstream:

#include<sstream>
...
int x = 239;
ostringstream ss;
ss << x;
//теперь ответ в ss.str();

cplusplus.com предлагает делать это в одну строчку так:

int Number = 123;
string String = static_cast<ostringstream*>( &(ostringstream() << Number) )->str();
»
11 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится

sscanf, sprintf:

#include <cstdio>
...
char s1[] = "123";
char s2[20];
int n;
sscanf(s1, "%d", &n);
sprintf(s2, "%d", n);

atoi, itoa:

#include <cstdlib>
...
char s1[] = "123";
char s2[10];
int n = atoi(s1);
itoa(n, s2, 10);

третий параметр у itoa — основание системы счисления

  • »
    »
    11 лет назад, # ^ |
      Проголосовать: нравится +9 Проголосовать: не нравится

    а если переводить string ?

    • »
      »
      »
      11 лет назад, # ^ |
        Проголосовать: нравится +8 Проголосовать: не нравится

      Всегда можно взять и привести string к const char* и наоборот:

      string str1 = "123";
      const char* s1 = str.c_str();
      int n;
      sscanf(s1, "%d", &n)
      
      char buff[20];
      sprtinf(buff, "%d", n);
      string str2(buff);
      

      или просто

      string str1 = "123";
      int n;
      sscanf(str.c_str(), "%d", &n);
      
      char buff[20];
      string str2(itoa(n, buff, 10));
      

      забыл сказать, itoa возвращает указатель на строку с результатом (т.е. свой второй параметр)

»
11 лет назад, # |
  Проголосовать: нравится +22 Проголосовать: не нравится

C++11:

#include <string>

string s = to_string(42);

int i = stoi("42");