C语言中删除字符串中的重复字符,然后输出新的字符串

这是我的,不知道哪儿错了。求大神指教
#include <stdio.h>
#include <string.>
int main()
{
char str[80];

int j,len,i=0;
printf("input:");
gets(str);
len=strlen(str);
char c=str[i];
while(c!='\0')
{
for(j=1;str[j]!='\0';j++)
{
if(str[j]==c)
{
for(;str[j]!='\0';j++)
str[j]=str[j+1];
len--;
}
else
{
c=str[j];
i++;
}
}
}

puts(str);
getchar();
}

注意是C语言,不是C++,C#

#include <stdio.h>
#include <string.h>
int main()
{
   char c,str[80];
   int i=0,j,k,len;
   printf("input:");
   gets(str);
   len=strlen(str);
   c=str[i];
   while(c!='\0')
   {
     for(j=i+1;str[j]!='\0';j++)
     {
      if(str[j]==c)
       {
  for(k=j;str[k]!='\0';k++)
  str[k]=str[k+1];
  len--;
       }
 }
c=str[i++];
   }
   puts(str);
   getchar();
}

改动后可以运行了,你的错误:
1.包含的第二个头文件少写个h
2.在发现重复字符后需要删除时,if语句里for循环使用了j和外面大循环的j重复,会造成不可预料的错误
3.else后面的赋值不正确,应该等第一个for循环结束后,而不是if判断后

追问

如果输入 sahkhfaaa
输出为 sahkfa 啊。

追答

话说我刚才在给你调试,找出问题所在了。。。。
if语句里加一句j--
因为删除一个字符,原来 j 指示的字符前移了一位

话说天地良心哪

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-22
这个可以了!
#include <stdio.h>#include <string.h>void main(){ char str[80]; int j,len,i,k; printf("input:"); gets(str); len=strlen(str); for(i=0;i<=len;i++) { for(j=i;j<=len;j++) { if(str[j]==str[i]) { k=i; while(str[k]!=0) { str[k]=str[k+1]; k++; } len--; } } } puts(str);}
第2个回答  2013-12-22
你的程序我就懒得看啦。不过呢,可以根据我的经验给你个思路。可以来一个类似于冒泡法的算法函数,逐一循环比较该字符串的ASCII码值,相同去掉,不同丢到一个数组中去。本回答被提问者采纳