2011-04-05 81 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