C++如何将包含字符串和数字的字符串转换为int或long

标签 c++ string atoi

我正在尝试将包含字母和数字值的字符串变量转换为 int 变量。

string argument = "100km";
int i = atoi(argument.c_str());
cout<<i<<endl;

我已经确认 iint100 并且省略了 km。 但是,如果我输入超过 int 范围的 2147483648kmi 将有 -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/

相关文章:

c - 错误的值 - 将大字符分解为 int 数组

c - 使用atoi检查字符串

c++ - 不能让 atoi 接收字符串(字符串与 C 字符串?)

c++ - 有没有更好的方法来设计这个消息传递代码?

c++ - CImg 库中的奇怪语法,不知道它叫什么

c++ - 共享库中静态函数成员的销毁顺序

arrays - 自定义字符串排序: How do I place these strings in an array in this particular order

c++ - 无穷大与 NAN 值

c++ - 从第一原则反转字符串 - 怎么了?

python - 我有一个长字符串,其中包含多种格式的日期(dd-mm-yyyy、mm-dd-yyyy 等)。如何将它们全部转换为相同的格式?