strcat,strcpy,strcmp,strlen函数原型及其写法

相信大家对这几个函数相当熟悉,但是能轻松的写出它们的原型及其实现函数吗?恐怕会底气不足吧?那么此文将带你夯实基础,轻松搞定它们,并增进对它们的了解以便今后使用起来胸有成足。

strcat的函数原型如下:

char *strcat(char *strDest, const char *strScr)
下面就用实例演示其写法,并对关键步骤进行注解。

#include "stdio.h"
#include "assert.h"
using namespace std;

char *strcat(char *strDest, const char *strScr) //(1)
{
	char * address = strDest; 
	assert((strDest != NULL) && (strScr != NULL)); //(2)      
	while(*strDest!='\0')//(3)
	{                        
		strDest++;//(4)
	}                        
	while(*strDest++ = *strScr++) 
	{
		NULL; 
	}                        
	return address; //(5)
}
int main()
{
	char str1[100]={"i can "};
	char str2[50]={"write strcat"};
	printf("%s\n",strcat(str1,str2));
	return 0;
}

运行结果如下:


(1)  将源字符串加上const声明,表明其为输入参数

(2)  断言assert的用法,如果条件成立程序正常运行,如果不成立报错并终止程序的运行,大家可以自己测试一下assert函数的用法,看看具体的效果如何。

(3)  等价于while(*strDest),若使用while(*strDes++!=’\0’),则会出现strScr不能连接到strDest后面的情况,因为++操作不受循环的约束的,这样while结束时*strDest并没有指向字符串的结束符‘0’,再执行strScr赋值操作已是无用了,因为strDest中已经出现结束符‘\0’了。

(4)  为了实现链式操作,将目的地址返回

看完之后是不是觉得很简单,那么下面其他函数的实现就不过多解释了,请诸君自己体会。

strcpy函数原型如下:

char *strcpy(char *strDest, const char *strScr)
其实现代码和运行结果如下所示:

#include "stdio.h"
#include "assert.h"

char *strcpy(char *strDest, const char *strScr)
{
	char *address = strDest;
	assert((strDest != NULL) && (strScr != NULL));
	while(*strScr)
	{
		*strDest++ = *strScr++;
	}
	*strDest = '\0';
	return address;
}

void main()
{
	char str1[100]={"i can write strcpy "};
	char str2[50]={"strcpy is so easy"};
	printf("%s\n",strcpy(str1,str2));
}
运行结果如下:

strcmp的函数原型如下:

int strcmpa (const char *str1,const char *str2)
其实现代码及运行结果如下:

#include <stdio.h>
#include <assert.h>
int strcmpa (const char *str1,const char *str2)
{           
	int len = 0;
	assert((str1 != '\0') && (str2 != '\0'));
	while(*str1 && *str2 && (*str1==*str2))
	{
		str1++;
		str2++;
	}
	if((*str1-*str2)>0)//(1)
		return 1;
	else if((*str1-*str2)<0)
		return -1;
	else
		return 0;
}

void main()
{
	char str1[100] = {"abcd"};
	char str2[50] = {"bcde "};
	printf("%d\n",strcmpa(str1,str2));
}
(1)根据编译器不同其返回值有所不同,对VS和VC编译器而言,返回值就如同代码所述一样。

运行结果如下:

strlen的函数原型如下:

int strlena(const char *str)
其实现代码及运行结果如下:

#include <stdio.h>
#include <assert.h>

int strlena(const char *str)
{
	int len = 0;
	assert(str != NULL);
	while(*str++)
	{
		len++;
	}
	return len;
}
int main()
{
	char str1[100] = {"strlen is so easy"};
	char str2[50] = {"i love C/C++"};
	printf("strlen is so easy的长度为:");
	printf("%d\n",strlena(str1));
	printf("i love C/C++的长度为:");
	printf("%d\n",strlena(str2));
	return 0;
}
运行结果如下:

掌握这些函数的原型及写法,不仅可以更好的运用它,更能练习字符串的相关处理的基本功,何乐不为。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值