如何比较Struct数组中的字符串?

时间:2018-11-22 22:12:47

标签: c arrays struct

我正在尝试比较从结构数组中获得的字符串,并尝试在打印出来之前查看两者是否相等。

        int index;

        for (int i = 0; strlen((cityArr+i)->cityname) != 0; i++) {
            for (int j = 0; strlen((cityArr+j)->cityname) != 0; j++) {
                if (strcmp(cityArr[i].cityname, cityArr[j].cityname) == 0) {
                    index = i;
                }
            }
        }

        printf("%s\n", cityArr[index].cityname);

所以我所掌握的信息基本上意味着我应该只打印一份副本?

但是,我的输出是:     圣荷西     沃思堡     圣地亚哥     匹兹堡     奥马哈     斯托克顿     奥斯丁     纽约     科珀斯克里斯蒂     沃思堡

我相信唯一需要打印的城市是沃思堡,而不是所有城市(在这里就是这种情况)。

有人确认我的问题是重复的- 我通读了本主题,但是我有点理解strcmp是如何工作的。 如果字符串相等,strcmp将返回0值,但是在这里我试图打印出相等的城市名称,但是它将打印出我正在处理的数组中的每个城市。

1 个答案:

答案 0 :(得分:0)

i等于j时,您所做的事情很好,但是您错过了一件事。 要解决此问题,您可以执行以下操作:

int index;

for (int i = 0; strlen((cityArr+i)->cityname) != 0; i++) {
    for (int j = 0; strlen((cityArr+j)->cityname) != 0; j++) {
        if (i == j) {
            continue;
        }
        if (strcmp(cityArr[i].cityname, cityArr[j].cityname) == 0) {
            index = i;
        }
    }
}

printf("%s\n", cityArr[index].cityname);

这样,如果i等于j,则第二个for将传递到下一个迭代,而无需测试城市名称是否相同。