gpt4 book ai didi

c - 唯一元素 - 结构数组

转载 作者:太空宇宙 更新时间:2023-11-04 07:42:50 25 4
gpt4 key购买 nike

我有一个排序的 IP 结构,我需要在其中获取唯一 IP 的数量,出于某种原因,我这样做的方式结果是“0”。在这种情况下,应该有 12 个唯一的 ips。

包含以下元素的结构数组:

195.55.121.242
212.80.168.34
65.55.106.114
65.55.207.30
65.55.207.95
65.55.230.237
66.249.68.16
66.249.68.16
66.249.68.16
67.195.37.172
67.195.37.172
67.218.116.162
80.59.182.176
80.59.182.176
83.213.81.220
83.213.81.220
83.43.21.186
83.43.21.186

代码:

typedef struct {
char *ip;
}thestruct;

qsort(mystruct, 18, sizeof(thestruct*), cmpme);

int un = 0;
for (i=0; i<18; i++) {
if (strcmp(mystruct[i++]->ip,mystruct[i]->ip)!=0) {
un++;
}
}

通过仅使用一个元素 (ip) 执行简单的 gets-strcmp,我发现两个字符串相等。这告诉我 strcmp 将其视为字符串。

我不太确定我错过了什么。

任何帮助将不胜感激。

谢谢

最佳答案

仔细看这一行:

if (strcmp(mystruct[i++]->ip,mystruct[i]->ip)!=0)

您正在比较索引 i 和索引 i(它们相等,因为它们相同)然后递增 i。 (实际上,这是未定义的行为,因为您正在修改 i 并在序列点之前多次读取它)。

你真的想这样做:

if (strcmp(mystruct[i + 1]->ip,mystruct[i]->ip)!=0)

比较索引 i+1 和索引 i 而不触及 i,因为 ifor 循环。此外,i 应该只从 0 到 17 循环,而不是从 0 到 18,因为您不想读到数组末尾。

关于c - 唯一元素 - 结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1813266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com