删除C中字符串中的相邻重复项

时间:2013-11-18 14:01:29

标签: c c-strings

如何删除C中字符串中的所有相邻重复项。例如..if" caaabbcdd"是给定的字符串然后它应该按顺序删除

 1. cbbcdd

 2. ccdd

 3. dd

因此最后返回一个空字符串。启动时间复杂度可以是O(n ^ 2)。任何人都可以帮忙。

到目前为止,我所做的一切

void recursiven2(char *str)
{
int i,j,k,len;
    len=strlen(str);
    for(i=0;i<len-1;i++)
    {
    if(str[i]==str[i+1])
    {
        for(j=i;j<len-2;j++)
            str[j]=str[j+2];
        str[j]='\0';
    }
    }

}

3 个答案:

答案 0 :(得分:1)

您可以参考this。它有一个非常好的解释。

答案 1 :(得分:0)

你的代码很接近,但并不完全。

从“如果这个角色与之前的角色相同,放弃它”的角度来看,更容易思考。如果您看到差异,那么您的代码更像是“如果此字符与下一个字符相同”。

此外,memmove()只是喜欢这个。

也许是这样的:

void compress(char *str)
{
  size_t len = strlen(str);

  if(len <= 1)
    return;

  for(size_t i = 1; i < len; )
  {
    if(str[i] == str[i - 1])
    {
      memmove(&str[i], &str[i + 1], (len - (i + 1) + 1);
      --len;
    }
    else
      ++i;
  }
}

上面可能有一个obi-wan error(或两个!),我还没有测试过。

答案 2 :(得分:0)

string removeDuplicates(string s) {
    int done=0;
    while(done==0)
    {
        int check=0;
        for(int i=0;i<s.length();i++)
    {
        if(s[i]==s[i+1])
        {
            s.erase(i,2);
            check=1;
        }
        
    };
        if(check==0)
        {
            done=1;
        }
    
        
    }
    return s;
        
    
}