题目:
实现字符串的拷贝,将字符串b拷贝给字符串a。
例如:
字符串a:hello world
字符串b:nihao
拷贝后:
字符串a:nihao
字符串b:nihao
解题思路:
解决本题需要解决两个问题,如何拷贝和拷贝的结束条件。
把字符串b拷贝给字符串a,想到将字符串a和字符串b同时进行遍历,然后逐个赋值。关于结束条件的判断主要依据的是两个字符串长度的大小关系,相等时只要一个遍历结束另一个也一定结束,并且拷贝完成。当两个字符串长度不等时,那么就要两个字符串都遍历完成才证明拷贝结束。综合来看,需要两个字符串都遍历完成了那么拷贝结束。
程序代码:
#include <stdio.h>
char * cpy(char *,char *);
int main(int argc, char *argv[])
{
char a[30]={"hello"};
char b[30];
printf("请输入字符串a:");
gets(a);
printf("请输入字符串b:");
gets(b);
char *ret = cpy(a,b);//执行拷贝
puts("拷贝后:");
printf("a=%s\nb=%s\n",ret,b);//拷贝函数返回的是拷贝后的a首地址,所以可以用ret打印a
return 0;
}
char * cpy(char *a,char *b){
for(int i = 0; a[i] || b[i]; i++)
//当两个字符串都到'\0'证明拷贝完成,否则可能拷贝不全或者原串字符没有被覆盖完
{
a[i] = b[i];//逐个赋值
}
return a;
}
运行结果:
请输入字符串a:hello world
请输入字符串b:nihao
拷贝后:
a=nihao
b=nihao