C语言数组 输入一个字符串,并将其中的字符’a’用字符串”shu”替代后输出。如输入为”123abcaHello”,
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的影响。
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");
}