用函数调用实现字符串的复制。
方法一:用字符型指针变量做实参#includevoid copy_string(char from[], char to[])//形参作字符数组 { int i = 0; while (from[i] != ' ') { to[i] = from[i]; i++; } to[i] = ' ';//赋值结束后要输入结束符' ' } int main() { char a[50], b[50]; gets(a); gets(b); char* from = a, * to = b;//from指向a数组首元素,to指向b数组首元素 copy_string(from, to);//实参为字符指针变量 puts(a); puts(b); return 0; }
运行结果如下:
方法二:用字符指针变量做形参和实参#includevoid copy_string(char *from, char *to)//定义函数,形参为字符指针变量 { for (; *from != ' '; from++, to++) *to = *from; *to = ' ';//赋值结束后要输入结束符' ' } int main() { char* a = "I am a teacher.";//a是char*型指针变量 char b[] = "You are a student.";//b是字符数组 char* p = b;//是指针变量p指向b数组首元素 copy_string(a, p);//调用copy_string函数,实参为指针变量 puts(a); puts(b); return 0; }
运行结果如下:
程序改进:对copy_string函数还可以改写得更精练一些
(1)将“*to=*from”这一语句放在while语句的表达式中,而且把赋值运算和判断是否为' '的运算放在一个表达式中,先赋值后判断。
void copy_string(char* from, char* to)
{
while ((*to = *from) != ' ')
{
to++;
from++;
}
*to = ' ';
}
(2)把上面程序的to++和from++运算与*to=*from合并,它的执行过程时,先将*from赋值给*to,然后使to和from增值。
void copy_string(char* from, char* to)
{
while ((*to++ = *from++) != ' ');
*to = ' ';
}
(3)当*from不等于' '时,将*from赋给*to,然后使to和from增值。
void copy_string(char* from, char* to)
{
while (*from != ' ')
*to++ = *from++;
*to = ' ';
}
(4)由于字符可以用其ASCII码来代替,因此,“while(*from!=' ')”可以用“while(*from!=0)”代替(' '的ASCII代码为0),而“*from!=0”又可简化为“*from”,所以整体可以化简为:
void copy_string(char* from, char* to)
{
while (*from)
*to++ = *from++;
// while ((*to++ = *from++));--上边语句的化简
*to = ' ';
}
以上就是这次全部的分享。



