只是有一个简单的问题 . 我在互联网上看了很多,我找到了一些解决方案,但没有一个已经有效 . 看一下将字符串转换为int,我不是指ASCII码 .
为了快速减少,我们将方程作为字符串传递 . 我们要将其分解,正确格式化并求解线性方程 . 现在,在说,我无法将字符串转换为int .
我知道字符串将采用格式(-5)或(25)等,所以它肯定是一个int . 但是我们如何从字符串中提取它?
我想的一种方法是通过字符串运行for / while循环,检查一个数字,然后提取所有数字,然后查看是否有一个前导' - ',如果存在,则将int乘以 - 1 .
虽然这个小问题看起来有点过于复杂 . 有任何想法吗?
12 回答
Boost.Lexical_cast怎么样?
这是他们的例子:
还有另一种简单的方法:假设您有一个像
c='4'
这样的角色,那么您可以执行以下步骤之一:1st:int q
q=(int) c ; (q is now 52 in ascii table ) . q=q-48; remember that adding 48 to digits is their ascii code .
第二种方式:
q=c-'0'; the same , character '0' means 48
不可否认,我的解决方案不适用于负整数,但它将从包含整数的输入文本中提取所有正整数 . 它使用了
numeric_only
语言环境:输入文本:
输出整数:
类
numeric_only
定义为:完整的在线演示:http://ideone.com/dRWSj
atoi
是一个内置函数,它将字符串转换为整数,假设字符串以整数表示开头 .http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
要完全正确,您需要检查错误标志 .
这通常适用于我使用它:
可能的选项如下所述:
1. First option: sscanf()
这是一个错误(也由cppcheck显示)因为"scanf without field width limits can crash with huge input data on some versions of libc"(参见here和here) .
2. Second option: std::sto()*
此解决方案简短而优雅,但仅适用于C 11兼容编译器 .
3. Third option: sstreams
但是,使用此解决方案很难区分不良输入(请参阅here) .
4. Fourth option: Boost's lexical_cast
但是,这只是sstream的包装,文档建议使用sstrem进行更好的错误管理(参见here) .
5. Fifth option: strto()*
由于错误管理,该解决方案非常长,并且在此处进行描述 . 由于没有函数返回普通int,因此在整数的情况下需要转换(有关如何实现此转换,请参阅here) .
6. Sixth option: Qt
Conclusions
总之,最好的解决方案是C 11 std :: stoi(),或作为第二种选择,使用Qt库 . 所有其他解决方案都是气馁或缺陷 .
使用atoi函数将字符串转换为整数:
http://www.cplusplus.com/reference/clibrary/cstdlib/atoi/
这可能有点矫枉过正,但
boost::lexical_cast<int>( theString )
应该很好地完成工作 .在C 11中,有一些很好的新转换函数,从
std::string
到数字类型 .而不是
您可以使用
其中
str
是您的号码std::string
.有各种数字的版本:
long stol(string)
,float stof(string)
,double stod(string)
,...见http://en.cppreference.com/w/cpp/string/basic_string/stol在Windows中,您可以使用:
strtol
,stringstream
如果需要解释十六进制,需要指定基数 .好吧,很多答案,很多可能性 . 我在这里缺少的是一些将字符串转换为不同的C整数类型(short,int,long,bool,...)的通用方法 . 我提出了以下解决方案:
以下是用法示例:
为什么不使用stringstream输出运算符将字符串转换为整数类型?答案如下:假设一个字符串包含的值超出了预期的整数类型的限制 . 例如,在Wndows 64上,max int是2147483647.让我们为一个字符串赋值max int 1:string str =“2147483648” . 现在,将字符串转换为int时:
x变为2147483647,绝对是一个错误:字符串“2147483648”不应该被转换为int 2147483647.提供的函数toIntegralType会发现这样的错误并抛出异常 .