永发信息网

C 语言 插入字符的疑惑

答案:2  悬赏:20  手机版
解决时间 2021-05-09 03:41
  • 提问者网友:城市野鹿
  • 2021-05-08 20:58

// 题意: 在 字符串 的 数字 字符 后 插入一个 '*' 号 ...

#include <stdio.h>

void func(char *s)

{
int i,j,n;

for(i=0;s[i]!='\0';i++)

if(s[i] >='0' && s[i]<='9')


{

n =0;

while(s[i+1+n] != '\0') n++;

for(j=i+1+n;j>i;j--)

{s[j+1] = s[j]; }
s[j+1] ='*';


// 如果 把 这段 “注释段”变成 执行语句的话 ..

// 则会 出现 意向不到 的 错误 ..

}


}


void main()
{

char s[30]={"SMopitarSM4pitar3MopitarSMo28"};

func(s);

printf("%s\n",s);

}

最佳答案
  • 五星知识达人网友:一把行者刀
  • 2021-05-08 21:51
这两个循环都是用前一个字符覆盖掉后一个字符,不同的是它们的循环的方向。一个是从字符串尾部到当前字符,一个是从当前字符到字符串尾部。从字符串尾部开始的循环因为后一个字符在被前一个字符覆盖前已经先保存到之后的位置上,所以能得到正确的结果。从当前字符开始的循环因为后一个字符没有先保存就被前一个字符覆盖,结果就是后面所有的字符都会被同一个字符所覆盖。更为严重的是这个循环会把做为字符串结束标志的'\0'也覆盖掉,再加上楼主你定义的字符数组太小,所以在printf函数输出字符串时可能会输出一些乱码。
全部回答
  • 1楼网友:你可爱的野爹
  • 2021-05-08 22:21
s数组要设得足够大,否则把字符串的剩余部分往后挪的时候可能没有足够的空间来存 #include <stdio.h> void func(char *s) { int i,j,n; for(i=0;s[i]!='\0';i++) if(s[i] >='0' && s[i]<='9') { n =0; while(s[i+1+n] != '\0') n++; s[i+1+n+1] = 0; for(j=i+n+1;j>i;j--) {s[j] = s[j-1]; } s[j+1] ='*'; } } void main() { char s[100]={"SMopitarSM4pitar3MopitarSMo28"}; func(s); printf("%s\n",s); }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯