我正在尝试将字符串解析为整数,我不确定我做错了什么:
string input;
cin >> input;
int s = std::stoi(input);
这不会构建并引发错误:'stoi'不是'std'的成员。
答案 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;会抛出。
虽然异常处理不是您问题的直接部分,但我认为明智之举。