重复数字,并按由小到大依次输出

img


我的代码在一个数出现三次及以上时会错误,我知道哪地方有问题,但不知道怎么改,请帮我看看
#include
#include
int main()
{
int m,i=0,j,c=0,x,y,r;
char a[100],b[100];
gets(a);
m=strlen(a);
if(m>7){
printf("Invalid input.");
return 0;
}
for(i=0;i
for(j=i+1;j<=m-1;j++){
if(a[i]==a[j]){c++;
b[c-1]=a[j];
break;
}
}

}

if(c==0&&m<=7){
printf("No repeated numbers.");
return 0;}
for(x=0;x
for(y=0;yb[y+1]){r=b[y];
b[y]=b[y+1];
b[y+1]=r;
}
}
for(r=0;r<=c-1;r++)printf("%c ",b[r]);

return 0;

}

修改如下,改动处见注释,供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    int m,i=0,j,c=0,x,y,r;
    char a[100],b[100]={0}; //修改,计数数组b[]元素初始化为 0.
    gets(a);
    m=strlen(a);
    if(m>7){
        printf("Invalid input.");
        return 0;
    }
    for(i=0;i<m-1;i++){
        for(j=i+1;j<m;j++){ //for(j=i+1;j<=m-1;j++) 修改
            if(a[i]==a[j] && !b[a[i]]){ //修改
                b[a[i]]++;
                //c++;
                //b[c-1]=a[j];
                //break;
            }
        }
    }
/*                修改 这段代码多余
    if(c==0&&m<=7){
        printf("No repeated numbers.");
        return 0;
    }
    for(x=0;x<c-1;x++){
        for(y=0;y<c-x-1;y++)
            if(b[y]>b[y+1]){
                r=b[y];
                b[y]=b[y+1];
                b[y+1]=r;
            }
    }
*/
    for(r=0,x=0;r<100;r++) // for(r=0;r<=c-1;r++) 修改
        if (b[r] != 0){
            printf("%c ",r);
            x=1;           //修改
        }
    if(!x) printf("No repeated numbers.");//修改
    return 0;
}