我正在编写一个代码来删除字符串中重复出现的字符。
描述:-从字符串中删除重复的字符
示例:-
示例输入=abcdeabd
示例输出=abcde
我已经编写了代码,它正在工作,当我通过运行示例测试用例进行测试时,它通过了大多数测试用例,但有些测试用例失败了,例如,当我将输入字符串用作“yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi yi
这是我的密码

#include<stdio.h>

int main(void)
{

        char a[60]="abcdeabd";
        int n=0;
        for(int l=0;a[l]!='\0';++l)
            ++n;
        printf("%d\n",--n);
        for(int i=0;i<=n;++i)
        {
            for(int j=i+1;j<=n;++j)
            {
                if(a[i]==a[j])
                {
                    for(int k=j;k<=n;++k)
                        a[k]=a[k+1];
                    --n;

                 }
            }
        }
      puts(a);
  return 0;
}

请告诉我这个密码哪里出错了。。。?

最佳答案

逻辑错误在块中

 if(a[i]==a[j])
 {
    for(int k=j;k<=n;++k)
       a[k]=a[k+1];
    --n;
 }

如果一个角色连续出现两次以上,就不起作用。它不适用于“addd”或“adddbc”。
将其更改为while循环以解决问题。
 while (a[i] == a[j])
 {
    for(int k=j;k<=n;++k)
       a[k]=a[k+1];
    --n;
 }

10-02 16:03