【问题标题】:How do I compare strings in an Array of Struct?如何比较结构数组中的字符串?
【发布时间】: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 或您如何终止这些条目有问题。但这发生在您没有公开的代码中。

标签: c arrays struct


【解决方案1】:

你所做的很好,但你错过了一件事,当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 将传递到下一次迭代,而不测试城市名称是否相同。

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2011-08-02
    • 1970-01-01
    相关资源
    最近更新 更多