繁体   English   中英

平等检查没有按预期工作

[英]Equality check doesn't work as expected

正如您在以下示例中看到的那样,我正在比较歌词变量中的单词,我想获得计数的唯一单词,但结果返回0 虽然在结果中有3个相似的词,但它没有进入if块。 什么会导致这个问题?

您可以快速通过应用程序进行测试。

来源

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[]) {

    char lyric[] ="lorem ipsum is printing\nlorem ipsum is letters";
    int i = 0, j = 0, k = 0, y = 0, l = 0, s = 0;

    s = sizeof(lyric)/sizeof(char);

    for(k; k<s; ++k)
    {
        if(lyric[k] == ' ')
            ++l;

        if(lyric[k] == '\n')
            ++l;
    }

    char *row;
    char *temp[l];

    row = strtok (lyric," \n");

    while (row != NULL)
    {
        temp[i++] = row;
        row = strtok (NULL, " \n");
    }

    for (i=0;i<l; ++i){
        for (j=(i+1);j<l; ++j){

            printf("%s == %s\n", temp[i], temp[j]);
            if(temp[i] == temp[j]){
                y++;
            }
        }
    }

    printf("Unique word count : %d",y);

    return 0;
}

结果

lorem == ipsum
lorem == is
lorem == printing
lorem == lorem
lorem == ipsum
lorem == is
ipsum == is
ipsum == printing
ipsum == lorem
ipsum == ipsum
ipsum == is
is == printing
is == lorem
is == ipsum
is == is
printing == lorem
printing == ipsum
printing == is
lorem == ipsum
lorem == is
ipsum == is

Unique word count : 0

在您的代码中,

temp[i] == temp[j]

不会按预期工作因为操作数是指针,您想要的是比较指针指向的内存的内容,而不是指针本身。

您需要使用strcmp()来执行比较。

这里的问题是您的比较涉及两个指针,即 temp[i] 和 temp[j] 只不过是指向内存的指针您需要比较的是这些指针指向的值,您可以通过使用星号取消引用指针来实现(*) 运算符,即 (*temp[i]) 和 (*temp[j]) 或者如果您不想手动执行此操作,则如上所述使用 strcmp。 请参阅此C 字符串 -- 使用相等运算符 == 比较两个字符串的相等性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM