永发信息网

C 语言 插入字符的疑惑

答案:2  悬赏:20  手机版
解决时间 2021-05-09 03:41

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

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

}

最佳答案
这两个循环都是用前一个字符覆盖掉后一个字符,不同的是它们的循环的方向。一个是从字符串尾部到当前字符,一个是从当前字符到字符串尾部。从字符串尾部开始的循环因为后一个字符在被前一个字符覆盖前已经先保存到之后的位置上,所以能得到正确的结果。从当前字符开始的循环因为后一个字符没有先保存就被前一个字符覆盖,结果就是后面所有的字符都会被同一个字符所覆盖。更为严重的是这个循环会把做为字符串结束标志的'\0'也覆盖掉,再加上楼主你定义的字符数组太小,所以在printf函数输出字符串时可能会输出一些乱码。
全部回答
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); }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
今年的情人节和大年初一是同一天呢~好温暖的
请各位朋友介绍几首QQ背景音乐
怎样将ppt转成视频呢,要具体的过程。
陈翔淘汰是否有黑幕?
台州温岭到什么时候天气才会转凉
我的是window vistar系统的,为什么我的三国
安徽巢湖无为民房建造须要办理哪些手续,费用
Epson LQ-590K打印完后走纸不停怎么解决?
邮政广告我想知道这个在什么地方
地下城鬼泣怎麽分配sp点?
怎样才能在白天睡着
高二优化学习暑假40天化学的答案(天津科技处
宜昌中石油加油员工资大概多少
纳米怎么算?
%的脯乳动物面临灭绝?
推荐资讯
有啥好听的歌,中文的
立邦油漆多少钱一桶,立邦漆怎么样,优缺点是
抑郁了怎麽样才能回复正常?
攀枝花商贸电子成人中等专业学校招生简章
21世纪英语真的会成为世界普通话吗?如题
200消费卷等于多少点卷
分手的时候很伤心是为什么呢?
QQ寻仙金刚力士25以下怎么升级快
5173里发布出去的订单需求能取消吗?
我的鹧鸪仔快要死玩了,有谁能帮帮我阿,好心
像女人一样行动.像男人一样思考.这本书共有十
怎样解决父母的不愉快呢
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?