这是题目:下列给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后插入一个*号。例如,形参s所指的字符串为"def35adh3kjsdf7",执行后结果为"def3*5*adh3*kjsdf7*"
注意:部分源程序在文件BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
void fun(char *s)
{ int i, j, n;
for(i=0; s[i]!='\0'; i++)
/**********found**********/
if(s[i]>='0' && s[i]<='9')
{ n=0;
/**********found**********/
while(s[i+1+n]!= '\0') n++;
for(j=i+n+1; j>i; j--)
/**********found**********/
s[j+1]= s[j];
s[j+1]='*'; (就是这里,求大神解释一下)
i=i+1;
}
}
main()
{ char s[80]="def35adh3kjsdf7";
printf("\nThe original string is : %s\n",s);
fun(s);
printf("\nThe result is : %s\n",s);
}
请问为什么是是s[j+1]=‘*’,是s[j+1]明明已经有了s[j]值了,
另外,我把s[j+1]改成了s[i+1]编译出来的答案也是对的。
估计好长没人想看,但还是想请C语言大神帮帮忙。
s[j]赋值给了s[j+1],再让s[j+1]=‘*’的话,不是把上一句的赋值s[j]给覆盖了吗?
额 我还认为 腾空的空位是 s[i+1],然后我试着把s[j+1]='*'改成 s[i+1]='*' 也能编译正确答案,不太理解。
看来你对循环语句,还没了解,第一次循环的时候j+1此时为字符串最后字符7后面的那一位,是从最后一个往后移。
追问哦,对对对,for循环只管它下面的一条语句,我以为它管了两条,谢谢啦
谢谢你