Перевод из string в int
Программисты часто сталкиваются с необходимостью вывести из строки только число. Для этого Cpp обладает разными функциями. Ниже речь пойдёт о работе с целыми числами.
Функция atoi()
Функция atoi(num) анализирует строчные данные в str и возвращает целочисленное значение в int.
При этом:
- если в строке есть нечисловые символы, функция выводит первое целочисленное значение (при вводе «123.45» точка и 45 опускаются);
- функция игнорирует символы, которые не являются числом: точки, запятые, буквы, пробелы и так далее;
- если в строке не было найдено целое число, функция возвращает ноль.
- аналогичная функция есть в Си. В этом языке, если первый символ – не числовой, автоматически возвращается 0.
Пример №1:
#include <stdio.h>
#include <stdlib.h>int main ()
{
int i;
char buffer[256];
printf («Введите число: «);
fgets (buffer, 256, stdin);
i = atoi (buffer);
printf («Вы ввели %d. Если умножить на 2, будет %d.\n»,i,i*2);
return 0;
}
Вывод:
Введите число: 27
Вы ввели 27. Если умножить на 2, будет 54.
Пример №2:
#include < stdio.h > //Для printf()
#include < stdlib.h > //Для atoi()int main (void)
{
char *Str = «652.23brrt»; //Строка для преобразования
int Num=0; //Переменная для записи результатаNum = atoi (Str);
printf («%d\n»,Num);
return 0;
}
Вывод:
652
Функция std :: stoi
Эта функция анализирует содержимое строки на наличие целых чисел и преобразует его по нужному основанию.
Простой пример
#include <iostream>
#include <string>using namespace std;
int main() {
string inp = «100»;
cout << «Введите строку: » << inp << endl;// Use std::stoi() to convert string to integer
int res = stoi(inp);cout << «Число: » << res << endl;
return 0;
}
Вывод:
Введите строку: 100
Ваше число: 100
Рассмотрим также пример, если строка не содержит число.
#include <iostream>
#include <string>using namespace std;
int main() {
string inp = «Привет»;cout << «Строка вывода: » << inp << endl;
// Применяем std::stoi() для конвертации
try {
// Завершение кода, если строка не содержит чисел
int res = stoi(inp);
cout << «Число: » << res << endl;
}
catch(std::invalid_argument e) {
cout << «Неверное значение\n»;
}
return 0;
}
Вывод:
Строка вывода: Привет
Число: Неверное значение
Наглядный пример кода с преобразованием строк и чисел к новому основанию:
#include <iostream> // std::cout
#include <string> // std::string, std::stoiint main ()
{
std::string str_dec = «1000 и одна ночь»;
std::string str_hex = «40c3»;
std::string str_bin = «-10010110001»;
std::string str_auto = «0x7f»;std::string::size_type sz; // alias of size_t
int i_dec = std::stoi (str_dec,&sz);
int i_hex = std::stoi (str_hex,nullptr,16);
int i_bin = std::stoi (str_bin,nullptr,2);
int i_auto = std::stoi (str_auto,nullptr,0);std::cout << str_dec << «: » << i_dec << » и [» << str_dec.substr(sz) << «]\n»;
std::cout << str_hex << «: » << i_hex << ‘\n’;
std::cout << str_bin << «: » << i_bin << ‘\n’;
std::cout << str_auto << «: » << i_auto << ‘\n’;return 0;
}
Вывод:
1000 и одна ночь: 1000 и [одна ночь]
40c3: 16579
-10010110001: -1201
0x7f: 127
Функция stoi()
Функция расшифровывается как «string to integer». Она появилась в cpp сравнительно недавно (2011).
#include <iostream>
#include <string>using namespace std;
int main()
{
string str1 = «123»; // объявляем str1 как «123»
int x = stoi(str1); // преобразование
cout << «stoi(\»» << str1 << «\») это » << x << ‘\n’;
}
Вывод:
stoi(“123”) это 123
«Обратный» перевод с помощью to_string
Ещё одна функция, возникшая в cpp 11. В нём она работает с использованием stringstream. Этот способ возвращает строку со значением val.
#include <sstream>
#include <iostream>int main()
{
int i = 123;
std::stringstream ss;
ss << i;
std::string out_string = ss.str();
std::cout << out_string << «\n»;
return 0;
}
Ещё пример:
#include <iostream> // std::cout
#include <string> // std::string, std::to_stringint main ()
{
std::string pi = «Число Пи равно » + std::to_string(3.1415926);
std::string perfect = std::to_string(1+2+4+7+14) + » это натуральное число»;
std::cout << pi << ‘\n’;
std::cout << perfect << ‘\n’;
return 0;
}
Вывод:
Число Пи равно 3.141593
28 это натуральное число
Более «классический» пример
#include <iostream>
#include <string>int main ()
{
int n = 123;
std::string str = std::to_string(n);
std::cout << n << » ==> » << str << std::endl;return 0;
}
Ещё пример
#include <iostream>
#include<string>
using namespace std;
int main()
{
int i=11;
float f=12.3;
string str= to_string(i);
string str1= to_string(f);
cout<<«Строковое значение i :»<<str<<«\n»;
cout<<«Строковое значение f : «<< str1;
}
Вывод:
Строковое значение i: 11
Строковое значение f: 12.3000000
Заключение
Мы рассмотрели некоторые способы преобразовать строку в число и наоборот. C++ это сложный язык со множеством библиотек, модулей и функций. Это значит, что у каждой задачи может быть десяток решений.