关于c++string中的stoi用法

#include
#include
using namespace std;

int main()
{
string str = "89";
int i = stoi(str);
cout << i;
return 0;
}
我的编译器是codeblocks13.12 已经调过按照c++11的标准编译

stoi当字符串不符合规范时,会抛出异常,所以你应该捕获异常来做

 #include <stdexcept>

std::string y = "2323298347293874928374927392374924"
int x;

try {
  x = stoi(y);
}
catch(std::invalid_argument& e){
  // if no conversion could be performed
}
catch(std::out_of_range& e){
  // if the converted value would fall out of the range of the result type 
  // or if the underlying function (std::strtol or std::strtoull) sets errno 
  // to ERANGE.
}
catch(...) {
  // everything else
}

我在VS2013运行,没有问题。

图片说明

cout << i;改成cout << i<<endl;更好。带回车。
cout << i;也正确

stoi大致就是格式化字符串的功能,有什么问题?