字符串处理函数也是C语言考试的常见题。最常见的莫过于strlen( )和strcopy( )的实现。
为了区别于库函数strcopy ( ),我们把自己写的字符串复制函数取名为scopy ( )。
程序设计题:
编写函数scopy ( ),它的功能是:将字符串s2的内容复制给字符数组s1。(包括末尾的’\0’)。
请勿改动主函数main()中的任何内容,仅在函数scopy( )的花括号中填入你编写的若干语句。
#include”stdio.h”
void scopy (char *s1, char *s2)
{
}
void main()
{ char str1[20], str2[20]="China";
scopy(str1, str2);
printf("%s\n", str1);
}
解一(下标法):
void scopy (char *s1, char *s2)
{ int i;
for(i=0;s2[i];i++) s1[i]=s2[i];
s1[i]=0; //补末尾的’\0’
}
解二(指针法):
void scopy (char *s1, char *s2)
{
for( ; *s2 ; s1++, s2++) *s1=*s2;
*s1=0;
}
解二的while 写法:将for句改为:
while(*s2) *s1=*s2, s1++, s2++;
有些人喜欢把++写到*s1=*s2中,即while句写成
while(*s2) *s1++ = *s2++;
这个题目可以有些变化,比如10.7要求从s2的第m 个字符开始复制。这个很容易。
解一(下标法):
void scopy (char *s1, char *s2, int m)
{ int i;
for(i=m;s2[i];i++) s1[i-m]=s2[i];
s1[i-m]=0; //补末尾的’\0’
}
解二(指针法):
void scopy (char *s1, char *s2, int m)
{
for(s2+=m ; *s2 ; s1++, s2++) *s1=*s2;
*s1=0;
}
使用while 的写法:将for句改为:
s2+=m; while(*s2) *s1++ =
*s2++;
当然,也可以将strlen( )和strcopy( )合并,即复制的同时,计数字符串的长度。