如何使用C ++将String转换为Integer?

时间:2014-03-21 07:46:55

标签: c++

如何在C ++中将字符串转换为Integer?

我尝试了以下代码:

string num1="102";
string num2="110";
int n1,n2;
stringstream ss2(num1);
ss2>>n1;
stringstream ss3(num2);
ss3>>n2;

我获得了n1n2相同的垃圾值,但我没有获得Integer值。

我写的步骤是正确还是错误? 如果他们是正确的,为什么我没有得到正确答案? 如果它们不正确,将字符串转换为整数的正确方法是什么?

请回复...提前致谢

3 个答案:

答案 0 :(得分:4)

std::string转换为int的最简单方法是:

std::stoi(yourString);

要从std::string转换为长或长,您可以使用:

std::stol(yourString);  //long
std::stoll(yourString); //long long

Documentation

此解决方案仅适用于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_cast
int whatever = lexical_cast <int>(stringOfYourChoice);