Подскажите, пожалуйста, как в С++ перевести из int в string и наоборот.
Сообщение отредактировано: first_day -
Из строкового в целочисленный, С++ |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Из строкового в целочисленный, С++ |
first_day |
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: 1 |
Подскажите, пожалуйста, как в С++ перевести из int в string и наоборот.
Сообщение отредактировано: first_day - -------------------- Я бы изменил мир, да Бог не дает исходников.
|
volvo |
Сообщение
#2
|
Гость |
Так тебе надо Число -> Строка или наоборот? У тебя в сообщении и в заголовке разные вещи написаны...
Число -> Строка: зависит от компилятора... Если MS, то _itoa/_ltoa/_ultoa (для целочисленных типов) _ecvt/_fcvt/_gcvt (для вещественных) или воспользоваться возможностями sprintf и "впечатать" число в строку, завершив ее нулем: sprintf(s, "%7.2f\0", value); Строка -> Число: atoi/atol/atof (в зависимости от типа числа) |
first_day |
Сообщение
#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 - -------------------- Я бы изменил мир, да Бог не дает исходников.
|
volvo |
Сообщение
#4
|
Гость |
... В GCC 3.4.4 (насколько я помню, MinGW DevStudio компилирует GCC) прекрасно отрабатывает... |
first_day |
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: 1 |
А я ее как string объявлял...
Если мне нужно из строковой переменной взять только первые 2 символа? -------------------- Я бы изменил мир, да Бог не дает исходников.
|
volvo |
Сообщение
#6
|
Гость |
Значит, скопируй первые 2 символа в промежуточный буфер и их конвертируй (я использовал переменную buffer, чтоб не вводить еще одну, все равно потом результат конвертации число -> строка запишется туда же...):
int val = atoi(strncpy(buffer, s, 2)); |
first_day |
Сообщение
#7
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: 1 |
Компилируется, запускается, а потом ругается...
-------------------- Я бы изменил мир, да Бог не дает исходников.
|
volvo |
Сообщение
#8
|
Гость |
Во-первых, КАК ругается? Во-вторых, у тебя s не инициализирован, посмотри пост №4...
|
first_day |
Сообщение
#9
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: 1 |
если инициализирую при описани переменной все нормально, а если считываю из файла - завершает работу и возвращает кодом -1073741819.
Но, наверно я не правильно считываю... f_in>>s; В файле записано "11:03" Сообщение отредактировано: first_day - -------------------- Я бы изменил мир, да Бог не дает исходников.
|
volvo |
Сообщение
#10
|
Гость |
Нет, так нельзя... Если ты пишешь
char *s = "123"; , то у тебя есть собственно строка, и s - указатель на нее (это берет на себя компилятор)... Если же у тебя только char *s;, то указатель-то есть, а вот строки нет. И при попытке обращения "в никуда" будет ошибка. Выделяй место под строку в таком случае: char s[20];должно работать... |
first_day |
Сообщение
#11
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: 1 |
Понял, это поучилось.
А как можно "вырезать" например 2 символа начиная с какой-то позиции(например 3); int m=atoi(strncpy(buffer, s, 2)); Так можно только сначала? Сообщение отредактировано: first_day - -------------------- Я бы изменил мир, да Бог не дает исходников.
|
volvo |
Сообщение
#12
|
Гость |
Чтобы начиная с третьего символа скопировать 2 (нулевой, первый и второй - три символа - должны быть пропущены, то есть, s должно быть увеличено на 3):
int val = atoi(strncpy(buffer, s + 3, 2)); Можно и искать позицию ':' в строке, увеличивать ее на 1 и начиная оттуда конвертировать 2 символа: int val = atoi(strncpy(buffer, strstr(s, ":") + 1, 2)); |
first_day |
Сообщение
#13
|
Пионер Группа: Пользователи Сообщений: 86 Пол: Мужской Реальное имя: Илья Репутация: 1 |
Огромное спасибо!
-------------------- Я бы изменил мир, да Бог не дает исходников.
|
Текстовая версия | 24.12.2024 0:48 |