C ++,我不能弄清楚这里出了什么问题

时间:2019-02-08 00:49:14

标签: c++ arrays string

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

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

2 个答案:

答案 0 :(得分:1)

问题

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

两个引号''也不表示有效字符。没有空的char文字:要么有char(可以为null),要么没有char。

将其编译的解决方案

因此将循环条件更改为

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

甚至

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 

Online demo

答案 1 :(得分:1)

表达式:

WORD    [a-zA-Z0-9\/\.-]+
SPECIAL [()><|&;*]

%%
    _argcount = 0; 
    _args[0] = NULL; 

{WORD}|{SPECIAL} {  
      if(_argcount < _numargs-1) {
        _args[_argcount++] = (char *)strdup(yytext);
        _args[_argcount] = NULL;
      }
    }

试图将*A!=" && *B!=" 指向的字符与字符串文字 A进行比较。那并不能满足您的期望。

如果您的目的是简单地查看直到到达两个字符串的末尾(这是字符串compare (1)所需要的),则" && *B!="循环应是:

while

(1)这是假设想法是将字符串视为相等,这可能是您想要的。如果 它们的长度相同 并且所有字符都相同,则将它们视为相等。使用while(*A != '\0' || *B != '\0') 仅检查不超过最短字符串长度的字符,因此&&"pax"将被视为相等。