c++ std::string转int
实现方法:
- atoi
- strtol
- stoi
c风格转换
atoi、strtol
这两个函数都是从字符串开始寻找数字或者正负号或者小数点,遇到非法字符终止。
当你的字符串不是数字的时候,或者小数点等非数字,不会报异常!直接输出0.
- 纯数字字符
string strString = "123";
int nAtoi = atoi(strString.c_str());
int nStrtol = strtol(strString.c_str(),nullptr,10);
// nAtoi:123
// nStrtol:123
- 非纯数字字符
string strString = "123p";
int nAtoi = atoi(strString.c_str());
int nStrtol = strtol(strString.c_str(),nullptr,10); // strtol最后一个参数支持多进制
// nAtoi:0
// nStrtol:0
c++风格转换
stoi
stoi比c风格两函数多了异常
string str = "12f";
int nStoi1 = stoi(str); // 报异常 terminate called after throwing an instance of 'std::invalid_argument'
string str1 = "12";
int nStoi2 = stoi(str1);
// nStoi2:12
自定义
namespace STRING
{
template<typename T>
std::string to_string(const T& t) {
std::ostringstream oss;
oss << t;
return oss.str();
}
template<typename T>
T from_string(const std::string& str) {
T t;
std::istringstream iss(str);
iss >> t;
return t;
}
}
void test()
{
int nInt = 11;
std::string strInt = STRING::to_string(nInt);
// strInt:"11"
std::string strInt2 = "12";
int nInt2 = STRING::from_string<int>(strInt2);
// strInt2 :12
}