c语言去掉重复的字符后输出.

#include<stdio.h>
int main(void)
{
int i;
char str[80],b[80];
printf("Input a string: ");
i=0;
while((str[i]=getchar())!='/n')
i++;
str[i]='\0';
for(i=0;str[i]!='\0';i++)
{
for(i=0;b[i]!='\0';i++)
if(str[i]!=b[i])
b[i]=str[i];}
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
return 0;}
为什么没有输出?求大神教。。。

#include<stdio.h>

int main(void)

{

int i;

char str[80],b[80];

printf("Input a string: ");

 i=0;

 while((str[i]=getchar())!='\n')//注意这里是\n  因为你的是/n 所以在输入的时候会陷入死循换

i++;

 str[i]='\0';

  b[0]=str[0];把第一个字符赋值给b字符串 因为第一个一定是会存入b字符串中的

 

  int k=1;

  for(i=1;str[i]!='\0';i++)

  {

   for(int j=0;j<k;j++)

   {

  if(str[i]==b[j]) break;//如果str中的字符与已经放入b中的字符相同则终止循环

   else if((str[i]!=b[j])&&(j==k-1))//如果与已经放入b中的所有字符都不同则把字符放入b中

   {

    b[k]=str[i];

k++;//每次往b字符串中放入一个字符k就加一  k是b字符串的个数

   }

   }

  }

  b[k]='\0';//给b字符串一个结束标志

  for(i=0;b[i]!='\0';i++)

 printf("%c",b[i]);

  printf("\n",b);

return 0;

}

还有不懂可以追问

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-09-21
b[80]之前一直没有赋值 你后来循环怎么拿去比较的
循环嵌套 不要用同一个变量啊
for(i=0;str[i]!='\0';i++)
{
for(i=0;b[i]!='\0';i++)
if(str[i]!=b[i])
b[i]=str[i];}追问

求教怎么改啊。。

追答

#include
int main(void)
{
int i,j;
int flag=1;
char str[80],b[80];
printf("Input a string: \n");
i=0;
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';
for(i=0;str[i]!='\0';i++)
{
b[i] = str[i];
for(j=0;str[j]!='\0';j++)
{
if(i==j) continue;
if(b[i]==str[j])
{
flag = 0;
break;
}
}
if(flag)
{
printf("%c ",b[i]);
}
flag = 1;
}
return 0;
}

本回答被提问者采纳
第2个回答  2013-05-10
#include <stdio.h>
int main(void)
{
    int i, j, tail;
    char str[80],b[80];
       
    printf("Input a string: ");
    // 行接收gets,不需要用getchar一个个输入字符那么麻烦
    gets(str);
    // tail标识 b 数组的末尾
    tail = 0;
    for(i=0; str[i]!='\0'; i++)
    {
        for(j=0; j<tail; j++)
            if(str[i]==b[j])break;  //如果二者相等,跳出循环
        if(j == tail)               //条件成立表示未找到相同元素
        {
            b[tail] = str[i];       //那么往b末尾填入
            ++tail;
        }
    }
    b[tail] = '\0';                 //最后记得给字符串b补上'\0'结束符
    puts(b);
    return 0;
}

第3个回答  2013-05-10
我觉得你的程序错误不少,所以就在你的基础上改动了一下,希望你满意
#include<stdio.h>
int main(void)
{
int i,j;
char str[80],b[80];
printf("Input a string: ");
i=0;
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';
b[0]=str[0];
for(i=1,j=1;str[i]!='\0';i++)
{
if(str[i]!=str[i-1])
{
b[j]=str[i];
j++;
}
}
b[j]='\0';
for(i=0;b[i]!='\0';i++)
printf("%c",b[i]);
return 0;
}追问

运行结果有

怎么解决?

追答

你用的是什么软件呀?
我用的是C++6.0写的没有问题呀

追问

guide啊。。。

追答

这个没用过

第4个回答  2013-05-10
大哥,你2重循环就用一个循环变量,也太有才了吧
for(i=0;str[i]!='\0';i++)
{
for(i=0;b[i]!='\0';i++)追问

不好意思,,,才学,,不太会,,,什么意思?求教怎么解决啊

追答

你第一重循环里面使用i做循环变量,
在内层循环又使用i做循环变量,那么i的值在内层就被更改了,会影响到外层循环的。所以2重循环通常需要2个变量,除非你有足够的把握不会有问题。
另外其他问题也很多,
比如while((str[i]=getchar())!='/n') ,应该是'\n'不是/n
还有b[80]没有初始化,你最后for(i=0;b[i]!='\0';i++) printf("%c",b[i]);这个循环终止不了。
这里一次判断就开始赋值了,显然不型,要循环完了发现确实没有重复才能赋值啊
if(str[i]!=b[i])
b[i]=str[i];
暂时发现这么多,修改了再看能行不吧

c语言去掉重复的字符后输出.
else if((str[i]!=b[j])&&(j==k-1))\/\/如果与已经放入b中的所有字符都不同则把字符放入b中 { b[k]=str[i];k++;\/\/每次往b字符串中放入一个字符k就加一 k是b字符串的个数 } } } b[k]='\\0';\/\/给b字符串一个结束标志 for(i=0;b[i]!='\\0';i++)printf("%c",b[i...

C语言 输入一个字符串 去掉重复的字符,输出无重复的
想要排除重复,即留下只出现1次的,的,判断处if(letter[str[k]]==0)若想留下出现N次的,判断处if(letter[str[k]]==N-1) 即可。 已赞过 已踩过< 你对这个回答的评价是? 评论 收起 其他类似问题2018-05-31 c语言,输入为一些字符串,想要去除重复的字符串然后输出 2013-05-15 c语言去掉重复的字符后...

c语言排序后删除数组中重复的数字再排序输出
voidbubble_sort(char*str);intmain(){ charstr[SIZE];gets(str);delete_repeat(str);bubble_sort(str);puts(str);return0;} \/\/删除重复字符 voiddelete_repeat(char*str){ \/**判断数组内第i个字符是否与前i-1个字符存在重复:若重复,删除该字符,i之后的字符下标均减1,后重新判断新的第i...

...有空格的字符串,删除所有重复字符,按字符升序输出在屏幕上。怎么做...
printf(*a ? "\\n%s\\n" : "\\n(null)\\n",a);\/\/输出 return 0;} 供参考。

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...

C语言中删除字符串中的重复字符,然后输出新的字符串
这个容易,就是把指定位置的字符去掉,也就是说后面的字符覆盖 比如删除指定的字符在字符串中第一个出现的位置 void strdel(char str,char ch ){ char p = str;while(p ){ if(p==ch )break;} if(p ){ while(p ){ p==*(p+1);p++;} } } 希望能解决您的问题。

求C语言代码,删除字符串中重复字符
} \/\/删除重复字符的代码 printf("结果字符串为:%s\\n",str);} -- 方法二:char *delete_adjacent_char1(char *str){ if(str==NULL)return NULL;int i=0,j=0;int len=strlen(str);for(j=i+1;j<len;j++){ if(str[i]!=str[j])str[++i]=str[j];} str[i+1]=0;return ...

C语言编程:输入一个字符和字符串,删除字符串中和输入字符相同的所有字符...
define LEN 100 void delete_same(char * str,char ch){ int i=0;for(i=0;str[i]!=0;i++){ if(str[i]==ch){ strcpy(str+i,str+i+1);\/*删除相同元素*\/ } i--;} } void main(){ char ch;char str[LEN];printf("Please input the string:");gets(str);printf("Please ...

C语言程序题:从键盘输入8 个数字,删除重复的字符输出
int main(){ int a[8],b[8],i,j,k=0,flag;printf("输入八个数\\n");scanf("%d%d%d",&b[0],&b[1],&b[2],&b[3],&b[4],&b[5],&b[6],&b[7]);for(i=0;i<=7;i++){ flag=1;for(j=0;j<=i-1;j++)if(a[j]==b[i]){ flag=0;break;} if(flag){ a[...

...的字符串,分别找出其中数字,将重复的去掉后,按升序排列后输出...
int cmp(const void* a, const void* b) { \/\/C 语言比较函数,用于qsort return *(int *)a - *(int *)b;} void func(char *s, int length) { \/\/处理你给出的字符串 ,length为长度 static int arr[maxn];int cnt = 0;p=s;char sign;while ((p - s) < length) { whil...

相似回答