Перевод из 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::stoi

int 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_string

int 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++ это сложный язык со множеством библиотек, модулей и функций. Это значит, что у каждой задачи может быть десяток решений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *