Помощь - Поиск - Пользователи - Календарь
Полная версия: Из строкового в целочисленный
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
first_day
Подскажите, пожалуйста, как в С++ перевести из int в string и наоборот.
volvo
Так тебе надо Число -> Строка или наоборот? smile.gif У тебя в сообщении и в заголовке разные вещи написаны...

Число -> Строка: зависит от компилятора... Если MS, то _itoa/_ltoa/_ultoa (для целочисленных типов) _ecvt/_fcvt/_gcvt (для вещественных) или воспользоваться возможностями sprintf и "впечатать" число в строку, завершив ее нулем:
sprintf(s, "%7.2f\0", value);


Строка -> Число: atoi/atol/atof (в зависимости от типа числа)
first_day
Компилятор у меня MinGW Developer Studio. Мне нужно перевести и из строкового в целочисленный, и обратно.
Вот например у меня есть строковая переменная s, мне нужно ее записать в целочисленную переменную.

делаю
m=atoi(s1);
Выдает ошибку
cannot convert `std::string' to `int' for argument `1' to `char* itoa(int, char*, int)'
volvo
...
char *s = "187"; // Исходная строка
char buffer[128] = "\0"; // Место под ПЕРЕконвертированную из int строку

int val = atoi(s); // строка -> число
itoa(val, buffer, 10); // число -> строка
...



В GCC 3.4.4 (насколько я помню, MinGW DevStudio компилирует GCC) прекрасно отрабатывает...
first_day
А я ее как string объявлял...
Если мне нужно из строковой переменной взять только первые 2 символа?
volvo
Значит, скопируй первые 2 символа в промежуточный буфер и их конвертируй (я использовал переменную buffer, чтоб не вводить еще одну, все равно потом результат конвертации число -> строка запишется туда же...):

    int val = atoi(strncpy(buffer, s, 2));
itoa(val + 10, buffer, 10); // +10 чтобы было видно, что действительно происходит конвертация


first_day
Компилируется, запускается, а потом ругается...


char buffer[128] = "\0";
char *s;
int m=atoi(strncpy(buffer, s, 2));

volvo
Во-первых, КАК ругается? Во-вторых, у тебя s не инициализирован, посмотри пост №4...
first_day
если инициализирую при описани переменной все нормально, а если считываю из файла - завершает работу и возвращает кодом -1073741819.
Но, наверно я не правильно считываю...
f_in>>s;

В файле записано "11:03"
volvo
smile.gif Нет, так нельзя... Если ты пишешь
char *s = "123";

, то у тебя есть собственно строка, и s - указатель на нее (это берет на себя компилятор)... Если же у тебя только
char *s;
, то указатель-то есть, а вот строки нет. И при попытке обращения "в никуда" будет ошибка. Выделяй место под строку в таком случае:

    char s[20];
...
f >> s;
должно работать...
first_day
Понял, это поучилось.

А как можно "вырезать" например 2 символа начиная с какой-то позиции(например 3);

int m=atoi(strncpy(buffer, s, 2));



Так можно только сначала?
volvo
Чтобы начиная с третьего символа скопировать 2 (нулевой, первый и второй - три символа - должны быть пропущены, то есть, s должно быть увеличено на 3):

int val = atoi(strncpy(buffer, s + 3, 2));

Можно и искать позицию ':' в строке, увеличивать ее на 1 и начиная оттуда конвертировать 2 символа:
int val = atoi(strncpy(buffer, strstr(s, ":") + 1, 2));

first_day
Огромное спасибо! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.