自编字符串操作函数(字符串拷贝,连接,比较,求有效长度),以及const,assert大致使用方式

const定义常变量,其值不可修改
1.基本类型对const透明(const char a;),const只对a作用
2.const只修饰直接右边
3.权限只能同等传递或者缩小传递

assert,在debug模式下,代码出bug总是希望最早发现并进行改正嘛,但是测试函数时不一定能够测试全面,所以写代码时就加入判断条件,assert断言则是这个作用,例如函数中传入指针变量(注意需要引用头文件assert.h)
void MYstrcat(char *des,const char *src)
{
assert(src != NULL || des !=NULL);
}
若是空指针,则在此处报错。且assert仅在debug模式有效,release模式自动屏蔽,后续通常与if()连用,对非法值进行的操作。
--------------------------------------------------------------------------------------------------
字符串拷贝

void mystrcop(char *des,const char *src)
{
	while(*des++ = *src++);
}

将src字符串拷贝在des中,这个代码中,while的判断是个赋值语句,赋值语句的判断就是只咬这个赋值后的结果为非零,就执行循环,这里将src的值赋值给des,只要src不是字符串结尾’\0’,则循环就执行,然后下次执行src++赋值给des++,一直执行。



字符串连接

void mystrcat(char *des , const char *src)
{
	assert(des!=NULL || src!=NULL);
	if(des==NULL || src==NULL)
	{
		return ;
	}//参数检查
	while(*des !='\0')//找到des的尾巴
	{
		des++;
	}
	while (*des++ = *src++);//将src拷贝到des后边
}

des和src进来,此时两变量都在起始处,将des找到他的尾部,然后将src赋值在des尾部,连接结束,参数检查就是assert的应用



求字符串有效长度(有效长度不包括字符串结尾标记)

int mystrlen(const char *des)
{
	assert(des != NULL);
	if(des == NULL)
	{
		return 0;
	}//参数检查
	int i;
	for(i = 0;*des++ !='\0';++i)
	{
	}
	return i;
}

用i进行计数,若不是字符串结尾,++i,des往后继续走


字符串比较

int mystrcmp(const char *des,const char *src)
{
	assert(des != NULL || src != NULL);
	if(des == NULL || src == NULL)
		return 0;
	while ((*des - *src)==0 && *des!='\0')
	{
		des++;
		src++;
	}
	return (*des - *src);
}

比较两个字符串,若是相等,返回值为0;不相等,则返回差值,大于零,前字符串大,小于零,后字符串大。这里注意while循环中判断当前是否结尾很重要,不然当两字符串相等时程序出现bug,会死循环。
最后说一下字符串输出报错的问题
1.内存不足(数组长度不够):定义的字符串长度不够,导致操作时候字符串数组越界,所以崩溃
2.修改字符串常量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值