【问题标题】:C remove duplicate char from arrayC从数组中删除重复的字符
【发布时间】:2011-04-06 00:15:00
【问题描述】:

在我的程序中的某个地方,我得到了这些输出:

ee

或:

thht

基本上我想删除重复项以获得eth。我得到了这个代码:

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

这段代码给了我etht。如果在第一种情况下它可以,在第二种情况下它不是。我相信这是由于我没有排序数组。

有没有一种方法,无需对数组进行排序并使用上述代码,即可获得所需的输出?

【问题讨论】:

标签: c string


【解决方案1】:

您可以创建一个标志数组,每个可能的字符值一个。第一次遇到特定字符值时,设置标志。下次遇到该值时,将设置标志,指​​示您可以删除该字符。

沿线(未经测试):

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 终止符。

【讨论】:

  • @Favolas:不用担心。如果这解决了您的问题,请您“接受”这个答案吗?
猜你喜欢
  • 2015-08-28
  • 2018-06-09
  • 2011-03-24
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-23
  • 1970-01-01
相关资源
最近更新 更多