В этой статье мы рассмотрим, как мы можем преобразовать строку (string) в целое число (int) в языке программирования C++.
1. Использование std::stoi
Часто нам может понадобиться преобразовать числовые строки в целые числа. Для этого нам помогут определенные способы, чтобы быстро сделать преобразование.
Рассмотрим ниже два способа преобразования строки в целое число.
Для преобразования объекта std::string в целое число рекомендуется использовать эту опцию в C++. Она принимает строку как входное значение и возвращает целое число.
Вот простой пример:
#include <iostream>
#include <string>
using namespace std;
int main() {
string inp = "102";
cout << "Input String: " << inp << endl;
// Use std::stoi() to convert string to integer
int res = stoi(inp);
cout << "Integer: " << res << endl;
return 0;
}
На выходе:
Input String: 102
Integer: 102
Это сработает и для строк с отрицательными значениями.
Однако это вызовет исключение std::invalid_argument, если строка имеет неправильный формат.
Поэтому мы должны использовать в нашем коде обработку исключений, если строка не валидируется.
#include <iostream>
#include <string>
using namespace std;
int main() {
string inp = "Hello";
cout << "Input String: " << inp << endl;
// Use std::stoi() to convert string to integer
try {
// Wrap up code in try-catch block if string is not validated
int res = stoi(inp);
cout << "Integer: " << res << endl;
}
catch(std::invalid_argument e) {
cout << "Caught Invalid Argument Exception\n";
}
return 0;
}
На выходе:
Input String: Hello
Caught Invalid Argument Exception
Надеюсь, это даст вам хорошее представление о том, как вы можете преобразовать строку в целое число в C++.
Рассмотрим ниже еще один способ, используя функцию atoi()
в стиле C.
2. Использование atoi()
Мы можем преобразовать строку C ( char*
) в целое число, используя atoi(char* str)
.
Мы можем применить эту логику к нашему объекту std::string, сначала преобразовав его в строку C.
#include <iostream>
#include <string>
using namespace std;
int main() {
string inp = "120";
cout << "Input String: " << inp << endl;
// Convert std::string to C-string
const char* c_inp = inp.c_str();
// Use atoi() to convert C-string to integer
int res = atoi(c_inp);
cout << "Integer: " << res << endl;
return 0;
}
На выходе:
Input String: 120
Integer: 120
Как видите, это дает нам тот же результат, что и раньше!