【问题标题】:Incorrect string comparison字符串比较不正确
【发布时间】:2014-02-28 17:45:00
【问题描述】:

我有一个我完全无法解决的问题!

在我的程序中,用户输入要排序的数字。我必须能够对无穷大、负无穷大和所谓的“Nullity”(我在程序的早期定义)进行排序

如果用户想输入无穷大,例如,他们必须在字符串中输入“Pinf”。

我的问题是我将用户输入存储在 std::string 中,然后检查字符串是“pinf”还是“Pinf”,即使我输入了数字 3,所以字符串是“3”,它仍然可以进入if语句,我做错了什么?!

我的代码如下;

    string Temp;
    cin>> Temp;
    if (Temp.find("Pinf")||Temp.find("pinf")) {
        Num = Pinfinity;
    }

它每次都认为 if 语句为真。

【问题讨论】:

  • 您使用的是位| 运算符而不是逻辑|| 运算符。
  • 您的意思是 || 而不是 | 吗?如果单词首先作为句子的一部分出现,则逻辑不正确。
  • 除了不正确的操作符,read the documentation.
  • 我改变了它,以便它使用 ||而不是 |仍然进入 if 语句
  • 解决了这两个问题 |到 ||但我也必须使用if (Temp == "Pinf" || Temp == "pinf") {

标签: c++ string if-statement comparison infinity


【解决方案1】:

1.错误 - 您使用的是| 而不是||

2.错误 - findreturns

第一个匹配的第一个字符的位置。如果没有匹配 找到后,函数返回 string::npos。 你应该改变

if (Temp.find("Pinf")|Temp.find("pinf")) {

if ((Temp.find("Pinf") != string::npos) || (Temp.find("pinf") != string::npos)) {

【讨论】:

  • 这确实有效,但是对于我只检查字符串是“Pinf”还是“pinf”的简单需求来说,这有点过头了,但是我确实给了你的答案加 1。感谢您的回答
【解决方案2】:

如果您只是在搜索 Pinf 或 pinf,那么您可以使用它。注意逻辑或运算符是||

 if (Temp == "Pinf" || Temp == "pinf") {

【讨论】:

    【解决方案3】:

    | 是按位或运算符。使用|| 代替|

    if ( Temp.find("Pinf") != npos || Temp.find("pinf") != npos ) 
    

    【讨论】:

    • @Mahesh 因为如果找不到字符串,find() 将返回不为零的 npos。
    • @Mahesh if 总是针对负值执行...我认为您遗漏了一些东西..if 在零/假时中断..
    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多