在我的程序中,我得到了这些输出:
ee
或:
thht
基本上,我想删除副本以获得
e
或th
。我有这个密码:j = 0;
for (i = 1; i < strlen(erros); i++)
{
if (erros[j] != erros[i])
{
erros[j+1] = erros[i];
j++;
}
}
这段代码给了我
e
和tht
。如果在第一种情况下它是好的,在第二种情况下它不是。我相信这是因为我没有一个排序数组。有没有一种方法,不用对数组进行排序并使用上面的代码,就可以获得所需的输出?
最佳答案
您可以创建一个标记数组,每个标记对应一个可能的字符值。第一次遇到特定字符值时,请设置标志。下次遇到该值时,将设置标志,指示您可以删除该字符。
大致如下(未经测试):
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';
注意:您忘记在字符串中设置空终止符。
关于c - C从数组中删除重复的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5554769/