无法解析标识符stoi

时间:2015-11-08 18:13:09

标签: c++ std

我正在尝试将字符串解析为整数,我不确定我做错了什么:

string input;
cin >> input;
int s = std::stoi(input);

这不会构建并引发错误:'stoi'不是'std'的成员。

3 个答案:

答案 0 :(得分:2)

旧版本的C ++编译器不支持stoi。对于旧版本,您可以使用以下代码段将字符串转换为整数。

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

int main() {
    string input;
    cin >> input;
    int s = std::atoi(input.c_str());
    cout<<s<<endl;
    return 0;
}

否则使用高于C ++ 11的c ++编译器版本。

答案 1 :(得分:0)

您应该使用std::stringstream。 C字符串实用程序不适合std::string

#include <iostream>
#include <string>
#include <sstream>

int main() {
  int num1, num2;
  std::string line("5 6");
  std::stringstream ss(line);
  ss >> num1 >> num2;
  std::cout << "num1 is " << num1 << " and num2 is " << num2 << std::endl;
  return 0;
}

这是ideone

答案 2 :(得分:0)

您似乎忘记了包含字符串。

除此之外,请记住stoi可能会抛出,因此您希望将其用法封装在try / catch块中,如下所示:

using namespace std;
try
{
   string stringy= "25";
   int x= stoi(string);
   cout<<"y is: "<<y<<endl;
}
catch(invalid_argument& e)
{
   cout<<"you entered something that does NOT evaluate to an int"<<endl;
}

尝试这一点,如果你向stoi提供说&#34; x25&#34;,它会扔掉,如果没有,它会经历。如果你不使用这个try / catch语法,程序将在stoi抛出的那一刻崩溃。

此外,似乎stoi足够智能,如果它检测到无法评估的内容,就会停止解析,因此&#34; 25x&#34;会很好,它只是省略了x。但是&#34; x25&#34;会抛出。

虽然异常处理不是您问题的直接部分,但我认为明智之举。