用函数调用实现字符串的复制。
方法一:用字符型指针变量做实参#include
void copy_string(char from[], char to[])//形参作字符数组
{
int i = 0;
while (from[i] != '\0')
{
to[i] = from[i];
i++;
}
to[i] = '\0';//赋值结束后要输入结束符'\0'
}
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;
}
运行结果如下:
方法二:用字符指针变量做形参和实参#include
void copy_string(char *from, char *to)//定义函数,形参为字符指针变量
{
for (; *from != '\0'; from++, to++)
*to = *from;
*to = '\0';//赋值结束后要输入结束符'\0'
}
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语句的表达式中,而且把赋值运算和判断是否为'\0'的运算放在一个表达式中,先赋值后判断。
void copy_string(char* from, char* to)
{
while ((*to = *from) != 'void copy_string(char* from, char* to)
{
while ((*to++ = *from++) != 'void copy_string(char* from, char* to)
{
while (*from != 'void copy_string(char* from, char* to)
{
while (*from)
*to++ = *from++;
// while ((*to++ = *from++));--上边语句的化简
*to = '';
}
')
*to++ = *from++;
*to = '';
}
');
*to = '';
}
')
{
to++;
from++;
}
*to = '';
}
(2)把上面程序的to++和from++运算与*to=*from合并,它的执行过程时,先将*from赋值给*to,然后使to和from增值。
(3)当*from不等于'\0'时,将*from赋给*to,然后使to和from增值。
(4)由于字符可以用其ASCII码来代替,因此,“while(*from!='\0')”可以用“while(*from!=0)”代替('\0'的ASCII代码为0),而“*from!=0”又可简化为“*from”,所以整体可以化简为:
以上就是这次全部的分享。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)