请问 C++ 我无法弄清楚这里出了什么问题

c++ please i cant figure out what is wrong here

本文关键字:什么 问题 这里 弄清楚 C++ 请问      更新时间:2023-10-16
bool stringCompare(char*A, char*B)
{
    while(*A!=" && *B!=")
    {
        if (*A != *B)
        {
            return 0;
        }
        A++;
        B++;

我不知道我做错了什么,但我在 while 循环中不断收到错误。我尝试改用 strncmp,但出现同样的错误。如果我能得到帮助,我将不胜感激。

表达式:

*A!=" && *B!="

正在尝试将 A 指向的字符与字符串文字" && *B!="进行比较。这不会做你所期望的。

如果你的意图只是简单地查看,直到你到达两个字符串的末尾(这是字符串 compare(1(所需要的(,那么while循环应该是:

while(*A != '' || *B != '')

(1(这是假设这个想法是将字符串视为相等,这可能是你想要的。如果它们的长度相同并且所有字符都相同,则它们将被视为相等。使用 && 将仅检查字符,直到最短字符串的长度,因此"pax""paxdiablo"将被视为相等。

问题

双引号"不能替代两个单引号。这导致编译器认为您要将字符*A与字符串进行比较,从而" && *B!="出现奇怪的错误消息。

两个单引号''也不代表有效字符。 没有空字符文字:要么有一个字符(可能是空的(,要么没有字符。

编译它的解决方案

因此,请将循环条件更改为

while(*A!='' && *B!='')

甚至

while(*A!=0 && *B!=0)

相当于

while(*A && *B)

完整的代码是:

bool stringCompare(char*A, char*B)
{
    while(*A && *B)
    {
        if (*A != *B)
        {
            return false;
        }
        A++;
        B++;
    }
    return true;  
}

但这是正确的吗?

取决于您的期望。 如果你有一个字符串比另一个字符串长,程序将停止假设比较已经结束。 但我只假设函数的结尾,所以也许你在最后做了以下正确的 return 语句:

return *A==*B;  // returns true only if both are equal meaning both 0 

在线演示