【问题标题】:Why is my string comparison failing?为什么我的字符串比较失败?
【发布时间】:2017-02-24 23:54:38
【问题描述】:

我正在尝试逐行读取 C++ 中的文件,并且我已将每一行读入一个向量。文件内容如下:

00001010
01101010
10101011
11110111

我正在尝试精确以 00、01 和 10 开头的行,使用下面的比较可以正常工作。

    std::string opcode = GetInstruction().substr(0,2);
    std::string fucode = GetInstruction().substr(7);

    if(opcode == "01") {
        AddInstruction(GetInstruction());
    }
    else if(opcode == "10") {
        SubInstruction(GetInstruction());
    }

    else if(opcode == "00") {
        LoadInstruction(GetInstruction());
    }

似乎不起作用的部分是,如果我尝试提取以 11 开头并以 1 结尾的行。为此,我正在进行以下比较。

    else if((opcode == "11") && (fucode == "1")){
        std::cout<<GetInstruction();
        PrintInstruction(GetInstruction());
    }

GetInstruction 从上面的二进制数序列中返回一行,例如 00001010。上面的代码块中似乎没有运行,所以我猜我的比较有些不对劲,但我不知道怎么做。我尝试打印出fucode 的值,它打印出每行最后一个字符的正确序列(即0 0 1 1)。

【问题讨论】:

  • GetInstruction() 返回什么?每次调用它都会返回相同的值吗?
  • GetInstruction 从上面的二进制数序列中返回一行,例如 00001010 作为字符串。
  • 那么当你调用它两次时,它会返回两个不同的行吗?
  • 代码片段的前两行调用GetInstruction() 两次。我想知道opcodefucode 是否指的是同一条指令。
  • @DYZ 是 opcode 和 fucode 指的是当前迭代的相同指令。 fucode 是最后一位,操作码是前两位。

标签: c++ string string-comparison


【解决方案1】:

我知道问题出在哪里,但我不能完全解释原因。也许其他人可以扩展它。改变

else if((opcode == "11") && (fucode == "1")){
    std::cout<<GetInstruction();
    PrintInstruction(GetInstruction());
}

 else if(opcode.compare("11") && fucode.compare("1")){
    std::cout<<GetInstruction();
    PrintInstruction(GetInstruction());
}

似乎已经解决了这个问题。

【讨论】:

  • 它现在可以工作了,因为如果字符串相等,比较将返回 0,否则返回一个表示差异的数字 (1/-1)。这可能不是您想要的。
  • 确实,你已经使它等效于if((opcode != "11") &amp;&amp; (fucode != "1"))
  • 所以我应该做到(!opcode.compare("11") &amp;&amp; !fucode.compare("1"))?
猜你喜欢
  • 2011-04-04
  • 2012-03-12
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多