【问题标题】:C++ : istringstream conversion to long int doesn't workC++:将 istringstream 转换为 long int 不起作用
【发布时间】:2023-03-30 15:10:01
【问题描述】:

我的问题是,我想将一个字符串转换成一个长整数。为此,我以这种方式使用 istringstream:

long x;
string lString;
istringstream istr;
getLine(cin, lString);
istr.str(lString);
if(!(istr>>x)) return false; //Edited after answer below

(转换和cin其实是两种不同的方法,我只是把相关代码放在一起)。

如果我输入“1”,以下代码将返回 false,但如果我输入“1.0”,则不会。我可以搜索 .在字符串中,如果没有则添加它,但是没有将字符串转换为长字符串的方法吗?

【问题讨论】:

  • 你为什么要这么做?请改用std::stol
  • 问题在于如果转换不起作用,它会引发异常而不是返回 false。我必须知道字符串是否“无效”,但我不希望程序停止,而且我们还没有学习异常机制(这是学校的实际工作)所以我想我们不应该使用他们。不过我对此一无所知,无论如何我都可以使用它,所以,谢谢!

标签: c++ string istringstream


【解决方案1】:

这是因为operator precedence! 运算符的优先级高于 >> 运算符,因此对于编译器,您编写的是

if ((!istr) >> x)

您需要添加自己的括号:

if (!(istr >> x))

【讨论】:

  • 对不起,我复制了一次我弄错了(你帮助纠正了另一个错误,谢谢^^。但是这个问题发生在正确位置的括号:s
猜你喜欢
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多