重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
提示:仅供参考,如有错误,还望指出。
创新互联公司是一家专业从事网站设计、网站制作的网络公司。作为专业网站制作公司,创新互联公司依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、成都全网营销及网站设计开发服务!
目录
一、字符串复制
二、一些优化
1.一次简单优化
2.二次优化
3.三次优化
4.四次优化
5.最后的优化
总结
前言
以下是对字符串复制的一些优化
一、字符串复制这是自己能想到的方法
主要思想:通过两个指针,对二者进行遍历,若该被复制的字符不为‘\0’来进行一一复制。
可是这样‘\0’字符就无法复制,而此时被复制字符的地址刚好又是‘\0’,再进行一次复制就好。
//我的字符串复制
void my_strcpy(char* dest,char* rsc)
{
while (*rsc != '\0')
{
*dest = *rsc;
dest++;
rsc++;
}
*dest = *rsc;
}
二、一些优化1.一次简单优化注:这些优化都是基于前一次的优化,也体现出一个循序渐进的过程
这里实现了一小点的优化,也就是将三句语句合成一句
void my_strcpy(char* dest, char* rsc)
{
while (*rsc != '\0')
{
*dest++ = *rsc++;
}
*dest = *rsc;
}
2.二次优化
这里实现了我们既可以赋值字符也能够复制'\0'
由于当被复制的字符为‘\0’时,也得到了复制,同时还跳出了循环
void my_strcpy(char* dest, char* rsc)
{
while (*dest++ = *rsc++)
{
;
}
}
这里优化了健壮性,可这里没有体现出问题在哪。
在二次优化中,添加了一个判断语句,只有二者同时不为空指针时,才会进入遍历复制的过程。
void my_strcpy(char* dest, char* rsc)
{
if (dest != NULL && rsc != NULL)
{
while (*dest++ = *rsc++)
{
;
}
}
}
这里用到了断言函数assert();同时需要添加该头文件
使用assert()函数,若不满足函数体中条件,就会报错,并且具体体现在哪一行,更有利于找错。
#include
my_strcpy(char* dest, char* rsc)
{
assert(dest != NULL);
assert(rsc != NULL);
while (*dest++ = *rsc++)
{
;
}
}
这个就比较细节,也是为了防止一些错误而形成的优化。
在被复制字符中加上一个const,为了防止while循环中的条件,若不注意将二者位置调换,就会出现报错的情况。
这里也给大家推荐一个网站cplusplus.com - The C++ Resources Network
若有不懂的函数或者函数需要的头文件都可以在这里查。 这里也到了strcpy函数中参数的类型,若以后要写类似于库函数的函数也可以考虑这里面的参数类型。
#include
void my_strcpy(char* dest, const char* rsc)
{
assert(dest != NULL);
assert(rsc != NULL);
while (*dest++ = *rsc++)
{
;
}
}
在我看来,编程很像数学,每当你了解到一个题目的多种解法后,有些解法会给人一种十分奇妙的感觉,也有一种勾起好奇心的感觉,就是由于这种好奇心,促使这我们成长。不过有时候的编程也很乏味,但是我们一定要坚持。
学习不易,如果这篇对你有帮助,足矣。
最后附上学习的链接(同样要是有一起学习的伙伴就更好了)
25.VS环境-C语言实用调试技巧(2)(C语言程序设计教程谭浩强 c语言谭浩强视频教程 c语言零基础入门教程 学习c语言 c语言视频教程 c语音 C语言教程_哔哩哔哩_bilibili
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧