【发布时间】:2018-11-22 22:12:47
【问题描述】:
我正在尝试比较从 struct Array 获得的字符串,并尝试在打印出来之前查看两者是否相等。
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,但在这里我试图打印出相等的城市名称,而是打印出我正在处理的数组中的每个城市。
【问题讨论】:
-
@jotaelesalinas 我通读了该主题,似乎没有我想要的答案。
-
所以我在这里的理解是,你想找出重复的条目,对吧?另外,您是在比较 1 个数组还是 2 个数组中的条目?
-
另外,当我再次阅读代码时,我发现它应该只打印最后一个条目,而不是全部。检查小提琴,cpp.sh/9s6m
-
1.) 您应该将
index初始化为无效值(例如 -1),以检测您是否发现了重复项(当然,事后还要检查)。 2.) 在不知道cityArr中的citynames 是如何存储的情况下,这很难说。到目前为止,(除了 1.))您公开的代码看起来还不错。如果cityArr[index].cityname打印它打印的内容,那么这可能是存储在cityArr[index].cityname中的内容。我想,您分配的citynames 或您如何终止这些条目有问题。但这发生在您没有公开的代码中。