2011-04-05 64 views
0

刪除重複的字符某處在我的計劃,我得到這些輸出:c從陣列

ee 

或:

thht 

基本上我想刪除重複獲得eth。我得到這個代碼:

j = 0; 
for (i = 1; i < strlen(erros); i++) 
{ 
    if (erros[j] != erros[i]) 
    { 
     erros[j+1] = erros[i]; 
     j++; 
    } 
} 

此代碼給我etht。如果在第一種情況下它可以,在第二種情況下則不行。我相信這是因爲我沒有排序數組。

有沒有一種方法,沒有排序數組和使用上面的代碼,以獲得所需的輸出?

+0

可能的重複[在C中刪除重複數組中的數據](http://stackoverflow.com/questions/2826233/removing-duplicates-in-an-array-in-c) – 2011-04-05 16:07:38

回答

3

您可以創建一個標誌數組,每個可能的字符值都有一個標誌。第一次遇到特定的字符值時,設置標誌。下一次遇到該值時,該標記將被設置,表示您可以刪除該字符。

沿(未經測試)的線路:

int flags[1 << CHAR_BIT]; 
memset(flags, 0, sizeof(flags)); 
j = 0; 
for (i = 0; i < strlen(erros); i++) 
{ 
    erros[j] = erros[i]; // Always copy, it's simpler 
    if (!flags[erros[i]]) 
    { 
     j++; 
    } 
    flags[erros[i]] = 1; // Always set the flag, it's simpler 
} 
erros[j] = '\0'; 

注:您忘記設置你的字符串NULL終止。

+0

@ Oli。非常感謝。 – Favolas 2011-04-06 09:42:24

+0

@Favolas:不用擔心。如果這解決了你的問題,請你能「接受」這個答案嗎? – 2011-04-06 10:00:37