我正在尝试将包含字母和数字值的字符串变量转换为 int 变量。
string argument = "100km";
int i = atoi(argument.c_str());
cout<<i<<endl;
我已经确认 i
的 int
为 100
并且省略了 km
。
但是,如果我输入超过 int
范围的 2147483648km
,i
将有 -2147483648
。
According to this page, int
应该可以有
–2,147,483,648 to 2,147,483,647
所以,我认为这个错误来自int
的范围,但是即使将atoi
替换为atol
也会出现同样的错误int
被替换为 unsigned long
,后者可以有更大的值。换句话说,将 int 替换为 long 并不能解决此错误。
有可能我需要想出另一种方法来将这种字符串(即“______km”的字符串转换为 int 变量)。
最佳答案
在某些编译器中,int
并不比 long“少很多”,实际上它们是相等的。
标准为您提供的唯一保证是 long
永远不会小于int
。
一个简单的解决方案是使用 atof
而不是使用 double
,在大多数平台上它是一个 64 位 IEE754 double ,能够表示所有正好等于 253 的整数,即 9,007,199,254,740,992
。
关于C++如何将包含字符串和数字的字符串转换为int或long,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30726898/