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

#include<stdio.h>intmain(void){inti;charstr[80],b[80];printf("Inputastring:");i=0;whi... #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;}
为什么没有输出?求大神教。。。
展开
 我来答
汐日南莘
推荐于2018-03-01 · TA获得超过1.4万个赞
知道大有可为答主
回答量:1.6万
采纳率:45%
帮助的人:7544万
展开全部

#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;

}

还有不懂可以追问

木子思曰
推荐于2016-09-21 · TA获得超过144个赞
知道小有建树答主
回答量:279
采纳率:28%
帮助的人:77.8万
展开全部
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;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
兔子和小强
2013-05-10 · TA获得超过6946个赞
知道大有可为答主
回答量:3332
采纳率:74%
帮助的人:1424万
展开全部
#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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
第101套婚纱
2013-05-10
知道答主
回答量:30
采纳率:0%
帮助的人:13.6万
展开全部
我觉得你的程序错误不少,所以就在你的基础上改动了一下,希望你满意
#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写的没有问题呀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
花花浪客
2013-05-10 · TA获得超过2069个赞
知道小有建树答主
回答量:792
采纳率:100%
帮助的人:711万
展开全部
大哥,你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];
暂时发现这么多,修改了再看能行不吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式