在我的程序的某个地方,我得到了这些输出:
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
。如果在第一种情况下它是OK,在第二种情况下它不是。我相信这是因为我没有排序数组。
有没有办法在没有对数组进行排序和使用上面的代码的情况下获得所需的输出?
答案 0 :(得分: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终止符。