如何在C ++中将字符串转换为Integer?
我尝试了以下代码:
string num1="102";
string num2="110";
int n1,n2;
stringstream ss2(num1);
ss2>>n1;
stringstream ss3(num2);
ss3>>n2;
我获得了n1
和n2
相同的垃圾值,但我没有获得Integer
值。
我写的步骤是正确还是错误? 如果他们是正确的,为什么我没有得到正确答案? 如果它们不正确,将字符串转换为整数的正确方法是什么?
请回复...提前致谢
答案 0 :(得分:4)
将std::string
转换为int的最简单方法是:
std::stoi(yourString);
要从std::string
转换为长或长,您可以使用:
std::stol(yourString); //long
std::stoll(yourString); //long long
此解决方案仅适用于C ++ 11代码。如果您无权访问C ++ 11,请考虑在当前代码中使用istringstream
而不是stringstream
。
答案 1 :(得分:1)
atoi( num1.c_str() )
,其中num1
是您的字符串,是最佳解决方案之一。
答案 2 :(得分:1)
如果您正在使用C ++ 11,您可以使用以下内容:
看来这段代码是可以的:请你发一大堆代码或整个文件,以便我们检查一下?答案可能并不总是你正在寻找的地方。
另一方面,为什么不使用 boost :: lexical_cast ?如果你没有意识到这一点,我在这里有一个非增强lexical_cast函数的副本,就像它一样:
#include <iostream>
#include <string>
#include <sstream>
#include <typeinfo>
template <typename T>
T lexical_cast(const std::string& s)
{
std::stringstream ss(s);
T result;
if ((ss >> result).fail() || !(ss >> std::ws).eof())
{
throw std::bad_cast();
}
return result;
}
注意这个函数形式如何使用std :: stringstream,为什么只使用它呢?关于这一点的好处是它不仅可用于 int ,因为作为模板,它还可以容纳其他类型的数据。请注意,我只使用int和float测试了这个。
注意:如果您决定使用lexical_cast *的*模板版本并将其放在单独的文件中,您最终必须在头文件中声明它。
使用int:
调用lexical_castint whatever = lexical_cast <int>(stringOfYourChoice);