我正在尝试比较从结构数组中获得的字符串,并尝试在打印出来之前查看两者是否相等。
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值,但是在这里我试图打印出相等的城市名称,但是它将打印出我正在处理的数组中的每个城市。
答案 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将传递到下一个迭代,而无需测试城市名称是否相同。