C语言数组 输入一个字符串,并将其中的字符’a’用字符串”shu”替代后输出。如输入为”123abcaHello”,

#include <stdio.h>
int main()
{
int i,j,k,m,n=0;
char a[81],s[4]="shu";
printf("请输入您要输入的字符串长度:");
scanf("%d",&m);
printf("请输入您要输入的字符串:");
for(i=0;i<m;i++)
scanf("%c",&a[i]);
for(i=0;i<m;i++)
{
if(a[i]=='a')
{ n=n+2;
for(j=m-1;j<i;j--)
a[j+2]=a[j];
j=i;
a[j]=s[0];
a[j+1]=s[1];
a[j+2]=s[2];
}
}
for(k=0;k<m+n;k++)
printf("%c",a[k]);
}

虽然这个程序写得冗长了点,但我想知道哪里错了在基础上应该怎么改 为什么我输入
m=5 a[i]=asdfg 会是shuf

#include <stdio.h>

int main()

{

 int i,j,k,m,n=0;

    char a[81],s[4]="shu";

    printf("请输入您要输入的字符串长度:");

    scanf("%d",&m);

    printf("请输入您要输入的字符串:");

getchar();    //为消除回车键的影响

    for(i=0;i<m;i++)

    scanf("%c",&a[i]);

    for(i=0;i<m;i++)

   {

     if(a[i]=='a')

     {                              // n=n+2, 删除了,没什么用

        for(j=m-1;j>i;j--)    // 由j<i改为j>i,表示i之后的都要移动。

        a[j+2]=a[j];

        j=i;

        a[j]=s[0];

        a[j+1]=s[1];

        a[j+2]=s[2];

m=m+2;                    // 添加,添加字符后更新字符总数

     }

    }

     for(k=0;k<m;k++)    //m+n改为m,m已经表示字符总数

     printf("%c",a[k]);

printf("\n");            //输出完字符后换行

}


123abcaHello的结果为:

追问

j>I我一开始改了但最后输出都会少个o,我觉得是getchar的问题,
但是“getchar(); //为消除回车键的影响”能具体解释下么,回车为什么会影响 getchar在这里的具体作用是什么,因为刚刚学所以不是很明白?谢谢

追答

输完字符串长度后有一个回车键,回车键是一个特殊的字符,会在第二个scanf中当作一个字符输入,所以输入的字符的有效数量就被占掉一个,最后一个字符不会被读取。所以用getchar()先读取回车键,消除对后续的scanf的影响。

追问

原来是这样懂了懂了!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-11
#include <stdio.h>
int main()
{
int i,j,k=0,m,n=0;
char a[81],s[4]="shu";
printf("n:");
scanf("%d",&m);
fflush(stdin);
printf("string:");
for(i=0;i<m;i++)
{
scanf("%c",&a[k]);
if(a[k]=='a')
for(j=0;j<3;j++)a[k++]=s[j];
else k++;
}
for(j=0;j<k;j++)
printf("%c",a[j]);
printf("\n");
}

相关了解……

你可能感兴趣的内容

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