IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Из строкового в целочисленный, С++
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


Подскажите, пожалуйста, как в С++ перевести из int в string и наоборот.

Сообщение отредактировано: first_day -


--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Так тебе надо Число -> Строка или наоборот? smile.gif У тебя в сообщении и в заголовке разные вещи написаны...

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


Строка -> Число: atoi/atol/atof (в зависимости от типа числа)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


Компилятор у меня MinGW Developer Studio. Мне нужно перевести и из строкового в целочисленный, и обратно.
Вот например у меня есть строковая переменная s, мне нужно ее записать в целочисленную переменную.

делаю
m=atoi(s1);
Выдает ошибку
cannot convert `std::string' to `int' for argument `1' to `char* itoa(int, char*, int)'

Сообщение отредактировано: first_day -


--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






...
char *s = "187"; // Исходная строка
char buffer[128] = "\0"; // Место под ПЕРЕконвертированную из int строку

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



В GCC 3.4.4 (насколько я помню, MinGW DevStudio компилирует GCC) прекрасно отрабатывает...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


А я ее как string объявлял...
Если мне нужно из строковой переменной взять только первые 2 символа?


--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Значит, скопируй первые 2 символа в промежуточный буфер и их конвертируй (я использовал переменную buffer, чтоб не вводить еще одну, все равно потом результат конвертации число -> строка запишется туда же...):

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


 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


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


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



--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Во-первых, КАК ругается? Во-вторых, у тебя s не инициализирован, посмотри пост №4...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


если инициализирую при описани переменной все нормально, а если считываю из файла - завершает работу и возвращает кодом -1073741819.
Но, наверно я не правильно считываю...
f_in>>s;

В файле записано "11:03"

Сообщение отредактировано: first_day -


--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






smile.gif Нет, так нельзя... Если ты пишешь
char *s = "123";

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

    char s[20];
...
f >> s;
должно работать...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


Понял, это поучилось.

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

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



Так можно только сначала?

Сообщение отредактировано: first_day -


--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






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

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

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

 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Пионер
**

Группа: Пользователи
Сообщений: 86
Пол: Мужской
Реальное имя: Илья

Репутация: -  1  +


Огромное спасибо! smile.gif


--------------------
Я бы изменил мир, да Бог не дает исходников.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.12.2020 15:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name