二级c上机评分问题

比如最后编程题
请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。
例如,输入:A1B23CD45,则输出为:A$1B$2$3CD$4$5。

我的答案:
/*void fun(char *a)
{
int i=0;
while(*(a+i)!=NULL)
{
if(*(a+i)>='0'&&*(a+i)<='9')
printf("$%c",*(a+i));
else printf("%c",*(a+i)); //直接打出字符串,没有改变字符串
i++;
}
}
题上给的答案:
void fun( char *s)
{char a[100];
int i=0;
while(*s)
if(*s>='0'&&*s<='9') {a[i++]='$';a[i++]=*s++;}
else a[i++]=*s++;
a='\0';
strcpy(s,a);
} //它是想把数组a改了,但貌似还有些错误。。。

这样最后的评分结果是什么呢?
望前辈指教~~~
还有能帮忙把这个程序做出来吗?标答貌似有些错误
我用的是VC++6.0 ,用三楼的程序总是内存出错。何解?
明白了,三楼的char *s="A1B23CD45"; 不够容纳新生成的数组。应改为,char char b[100]="sadf345",*s=b;这样就可以了,谢谢大家~

#include<stdio.h>
#include<string.h>
main()
{void fun();
char *s="A1B23CD45";
fun(s);
printf("%s",s);
getch();
}

void fun(char *s)
{char a[100];
int i=0;
while(*s)
if(*s>='0'&&*s<='9')
{a[i++]='$';
a[i++]=*s++;
}
else
a[i++]=*s++;
a[i]='\0'; /*这里便是和你答案不同的地方*/
strcpy(s,a);
}
这里主函数与函数一并给出,本程序在Win-tc,TC下编译通过,在TC下时把getch();这句删掉。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-03-10
没分
第2个回答  2008-03-10
应该是没分,你的程序有点问题,变量i++放的位置有问题
相似回答