所以我有一个包含数字的字符串,我想采用这些数字之一并将其转换为这样的int:
string s = "13245";
int a = stoi(s.at(3));
我尝试了stoi:
int a = stoi(s.at(3));
我尝试过atoi:
int a = atoi(s.at(3));
但是这些方法都不起作用,我发现的唯一方法是C方法:
int a = s.at(3)-'0';
你知道为什么stoi / atoi不起作用吗?您还有其他方法可以将字符串中的字符转换为int吗?
atoi接受const char *,而s.at(index)返回一个char,因此编译器将返回类型错误,而您可以执行以下操作:
string s = "13245";
auto c = s.at(3);
int a = atoi(&c);
函数stoi
需要一个std :: string类型的对象。 C函数atoi
期望指向字符串的char *
类型的对象。当您处理char类型的对象时。
此
int a = s.at(3)-'0';
是将数字字符的内部表示形式转换为相应的整数值的常用方法,因为数字代码彼此之间没有间隙。
来自C ++标准(2.3个字符集)
- ...在源和执行基本字符集中,上面的十进制数字列表中位于0之后的每个字符应为比上一个值大一个。
std :: string是一个字符数组,.at(3)或[3]将返回您一个字符。stoi和atoi处理字符串(许多字符),并将诸如“ -42”之类的字符串转换为其数字表示形式-42。
根据文档: