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];
暂时发现这么多,修改了再看能行不吧

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网