簡體   English   中英

唯一元素-結構數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM