c-如何比较结构数组中的字符串



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

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("%sn", cityArr[index].cityname);

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

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

我认为唯一应该印刷的城市是沃斯堡,而不是所有的城市(这里就是这样(。

有人认出我的问题是重复的——我通读了这个主题,但我有点理解strcmp是如何工作的。如果字符串相等,strcmp is将返回一个值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("%sn", cityArr[index].cityname);

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

最新更新