📅  最后修改于: 2023-12-03 15:14:00.193000             🧑  作者: Mango
在 C++ 中,将字符串转换为整型数字是一项常见的任务。C++ 标准库中提供了一个名为 stoi
的函数,它可以方便地将字符串转换为整型数字。
int stoi (const string& str, size_t* idx = 0, int base = 10);
stoi
函数的原型中包含三个参数:
str
:需要转换的字符串idx
:可选参数,指向第一个无法转换的字符的下标base
:可选参数,表示进制,默认为 10。stoi
函数会将字符串转换为整型数字。如果字符串中的字符无法转换为数字,则函数会抛出 invalid_argument
异常。如果结果超出了 int
类型所能表示的范围,则函数会抛出 out_of_range
异常。
如果指定了 idx
参数,则函数会将第一个无法转换的字符的下标存储在该参数中。
base
参数表示进制。如果字符串以 "0x" 或 "0X" 开头,则会将其解释为十六进制数字。如果字符串以 "0" 开头,则会将其解释为八进制数字。否则,将其解释为十进制数字。
下面是一些 stoi
函数的示例:
#include <string>
#include <iostream>
int main()
{
std::string str1 = "123";
std::string str2 = "-456";
std::string str3 = "0x1F";
std::string str4 = "0377";
std::string str5 = "abc123";
try {
int num1 = std::stoi(str1);
int num2 = std::stoi(str2);
int num3 = std::stoi(str3, nullptr, 16);
int num4 = std::stoi(str4, nullptr, 8);
int num5 = std::stoi(str5); // 会抛出异常
std::cout << num1 << std::endl; // 123
std::cout << num2 << std::endl; // -456
std::cout << num3 << std::endl; // 31
std::cout << num4 << std::endl; // 255
} catch (const std::exception& e) {
std::cout << e.what() << std::endl;
}
return 0;
}
在这个示例中,我们使用了不同的字符串和进制,来测试 stoi
函数的效果。其中,输入字符串 "abc123" 被视为无法转换为数字的字符串,因此会抛出异常。
C++ 标准库中的 stoi
函数可以方便地将字符串转换为整型数字,而且支持不同进制的输入。但在使用时需要注意,应该确保输入字符串能够被正确地解释为数字,否则会抛出异常。