📅  最后修改于: 2023-12-03 14:39:58.284000             🧑  作者: Mango
在c++中,常常需要将字符型数据转换成数字型数据。例如,需要将用户通过输入得到的数字字符串转换成int或double类型,才能进行数值计算或其他操作。
本文将介绍c++中的字符串到数字的转换方法。
在c++11中,可以使用stoi函数将字符串转换成int类型。函数原型如下:
int stoi (const string& str, size_t* idx = 0, int base = 10);
其中,str代表要转换的字符串;idx是一个可选参数,表示转换到字符串的哪个位置停止;base是一个基数参数,对应于str代表的数字的进制数,默认为10进制。
示例代码:
#include <iostream>
#include <string>
int main() {
std::string str_num = "123";
int int_num = std::stoi(str_num);
std::cout << int_num << std::endl; // 输出123
return 0;
}
如果要将字符串转换成double类型,可以使用stod函数。函数原型如下:
double stod (const string& str, size_t* idx = 0);
其中,str代表要转换的字符串;idx是一个可选参数,表示转换到字符串的哪个位置停止。
示例代码:
#include <iostream>
#include <string>
int main() {
std::string str_num = "3.14";
double double_num = std::stod(str_num);
std::cout << double_num << std::endl; // 输出3.14
return 0;
}
如果要转换的字符串中包含非数字字符,或者数字字符超过了int或double类型所能表示的范围,将导致转换错误。在这种情况下,可以通过检查idx参数来判断转换是否成功。
例如,在以下代码中,字符串包含字母字符,转换失败:
#include <iostream>
#include <string>
int main() {
std::string str_num = "123abc";
int int_num = std::stoi(str_num);
std::cout << int_num << std::endl; // 输出0
return 0;
}
如果需要更精细的错误处理,可以使用try-catch语句捕捉异常。当转换失败时,会抛出std::invalid_argument或std::out_of_range异常。
例如,在以下代码中,使用try-catch语句捕获异常:
#include <iostream>
#include <string>
#include <stdexcept>
int main() {
std::string str_num = "123abc";
try {
int int_num = std::stoi(str_num);
std::cout << int_num << std::endl;
}
catch(std::invalid_argument& ia) {
std::cerr << "Invalid argument: " << ia.what() << std::endl;
}
catch(std::out_of_range& oor) {
std::cerr << "Out of Range error: " << oor.what() << std::endl;
}
return 0;
}