面试中常考的C函数库中的字符串处理函数

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


int myStrlen(const char *strDest)
{
	assert(NULL != strDest);
	const char *p = strDest;
	int len = 0;
	while( (*p) != '\0' )
	{
		len++;
		p++;
	}
	return len;
}

int itrStrlen(const char *strDest)
{
	assert(NULL != strDest);
	return ('\0' != *strDest) ? (1 + itrStrlen(strDest+1)) : 0;
}

char* myStrcpy(char *strDst, const char *strSrc)
{
	assert(NULL != strDst && NULL != strSrc);
	char *strRst = strDst;
	while( *strSrc != '\0' )
		*(strDst++) = *(strSrc++);
	return strRst;
}

int myStrcmp(const char *strL, const char *strR)
{
	assert(NULL != strL && NULL != strR);
	int ret = 0;
	const char *left = strL;
	const char *right = strR;
	while( (!(ret = (*left - *right))) && (*right != '\0') )
	{
		left++;
		right++;
	}
	if(ret < 0) ret = -1;
	else if(ret > 0) ret = 1;
	return ret;
}
//???上网查
void * myMemset(void *buffer, int c, size_t count)
{
	assert(NULL != buffer);
	char *p = (char *)buffer;
	while(count--)
	{
		*p = 'c'; 
		printf("%d", *p);
		p++;
	}
	return buffer;
}

char * myStrchr(char *str, int c)
{
	assert(NULL != str);
	for(; *str != (char)c; str++);
	if(*str == '\0') return NULL;
	return str;
}

char * myStrcat(char *strDes, const char *strSrc)
{
	assert(NULL != strDes && NULL != strSrc);
	char *addr = strDes;
	while(*strDes != '\0') strDes++;
	while( (*strDes++ = *strSrc++) != '\0' );
	return addr;
}
//*有点难度
void * myMemcpy(void *to, const void *from, size_t count)
{
	assert(NULL != to && NULL != from);
	void *ret = to;
	char *pto = (char *)to;
	char *pfrom = (char *)from;
	assert(pto < pfrom || pto > (pfrom+count-1));//!!!
	while(count--)
	{
		*pto++ = *pfrom++;
	}
	return ret;
}

void test()
{
	//test strlen
	char *s = "dfdafdaf";
	int len = myStrlen(s);
	char *ss = "";
	len = myStrlen(ss);
	printf("%d\n", len);

	//test strcpy
	char *str = (char *)malloc(sizeof(char)*10);
	strcpy(str, s);
	//strcpy(str, "abcdefg");
	//strcpy(ss, s); //由于未对ss分配内存,因此会出现异常
	printf("%s\n", str);

	//test strcmp
	int ret = myStrcmp(str, s);
	printf("%d\n", ret);
	ret = myStrcmp(str, ss);
	printf("%d\n", ret);
	ret = myStrcmp(str, "zfdfd");
	printf("%d\n", ret);

	//test memset
	int a[10];
	myMemset(a, 1, sizeof(int)*10);

	//test strchr
	char *p = myStrchr(s, 'a');
	printf("\n%c\n", *p);

	//test strcat
	//char *cat = (char *)malloc(sizeof(char)*20);
	myStrcat(str, "aab");
	printf("%s\n", str);


}


int main()
{
	test();
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值