【问题标题】:Convert string to int in C++03 [duplicate]在C ++ 03中将字符串转换为int [重复]
【发布时间】:2012-11-07 21:36:55
【问题描述】:

可能重复:
How to parse a string to an int in C++?

在 C++03 中有多种方法可以将字符串转换为 int。到目前为止我发现的最好的是:

string text;
cin>>text;
int converted;

if ( !(istringstream(text) >> converted) ){
    cout<<"conversion failed\n";
}
cout<<"the converted string is "<<converted;

这个解决方案的问题是它接受“12monkeys”并毫不犹豫地将其转换为 12。在这种情况下,是否有一些简单的方法可以检查并输出“转换失败”?

请注意,我已经尝试过 atoi()、atol() 和 strtol(),但如果失败则返回 0 的事实是徒劳的。我怎么知道字符串是否不是“0”?也没有范围检查(strtol() 除外)。没有提到那里也存在“12monkeys”问题。

【问题讨论】:

  • 不幸的是我不能使用boost,所以我不能使用C++11。我想在C++03中找到最优雅、最简单的解决方案。
  • 你不能用boost,所以你不能用C++11?这没有多大意义。 Boost 适用于 C++03,还是您的意思是和?
  • 你有没有通过answer to a very similar question。它详细解决了您的问题。
  • 解决“12monkeys”输入的问题,见here
  • "strtol() 但如果失败则返回 0 的事实是徒劳的。我怎么知道..." rtfm: man strtol.或阅读 wnraman 链接的答案。

标签: c++ string int type-conversion c++03


【解决方案1】:
const char *string = "12monkeys";
char *end;
long value = std::strtol(string, &end, 10);
if (end == string)
    std::cout << "No number found\n";
else if (*end != '\0')
    std::cout << "Extra characters on end.\n";

【讨论】:

  • 谢谢 终于知道怎么用了。只需确保将“const char *end”更改为“char *end”即可编译。
  • @user1459339 - char *end 确实是正确的。叹。固定的。这是我们错过的;调用strtolconst char* 转换为可修改的char*
【解决方案2】:

您可以显式检查 eof:

string text;
cin>>text;
int converted;

istringstream iss(text);
if ( !(iss >> converted) ){
    cout<<"conversion failed\n";
}
if( iss.get() != std::stringstream::traits_type::eof() ) {
    cout<<"cocnversion failed\n";
}
cout<<"the converted string is "<<converted;

【讨论】:

  • 这似乎是最简单的方法。它甚至会检查范围(strtol 也是如此)。交易
猜你喜欢
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 2013-09-01
  • 2020-08-27
  • 1970-01-01
  • 2015-09-21
  • 2014-07-05
  • 2015-06-18
相关资源
最近更新 更多