[英]unique elements - struct array
我有一個排序的IP結構,由於某種原因,我需要獲取唯一IP的數量,結果是給我一個“ 0”。 在這種情況下,應該有12個唯一ip。
包含以下元素的struct數組:
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
,因為i
在遞增for
環路。 另外, i
只應該從0到17循環,而不是0到18,因為您不想讀取數組末尾的內容。
不要在同一條語句中讀取和修改相同的變量。 那是未定義的行為 !
嘗試
for (i=0; i<18; i++) {
if (strcmp(mystruct[i+1]->ip,mystruct[i]->ip)!=0) {
i++;
un++;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.