C语言重写string.h里的部分函数(未完工)

//本程序将重写string.h里的常用函数 
#include<stdio.h>
#define TEST

//布尔表达式判断字符是否等于'\0'时可省略写'\0' ,因为\0在ASCII码中为0,可视为布尔值等于0
//因此(*str)表达的是非零(TRUE),(!*str)表达的是零 (FALSE) 

int _strlen(const char *str)//返回字符串的长度 
{
	int len=0;
	while(*str++)len++;
	return len;
}

int dec_strlen(const char *str)//递归求字符串的长度 (无中间变量) 
{
	if(!*str)return 0;
	  else return 1+dec_strlen(str+1);
}
//============================================================ 
void _strcpy(char *dest,const char *src)//将字符串src复制给字符串dest,得到的是新字符串dest 
{
	while(*dest++ = *src++);
} 

void _strncpy(char *dest,const char *src,int size)
{
	if(size<=0){
		printf("ERROR\n");
		return;
	}
	const char *start=src;
	while(*src++ && size--);
	src--;
    for(;start<src;*dest=*start,start++,dest++);
    *dest='\0';
}
//============================================================ 
int _strcmp(const char *str1,const char *str2)//比较两个字符串大小,返回值为整数 
{
	while(*str1++ && *str2++)
	{
		if(*str1<*str2)return -1;
		if(*str1>*str2)return 1;
	}
	return 0;
}

int _strncmp(const char *str1,const char *str2,int size)
{
	if(size<=0){
		printf("ERROR\n");
		return 0;
	}
	for(;size--;str1++,str2++)
	{
		if(*str1<*str2)return -1;
		if(*str1>*str2)return 1;
	}
	return 0;
}
//============================================================ 
void _strcat(char *dest,const char *src)//连接两个字符串,得到的是新字符串dest 
{
	while(*++dest);//指针移向dest的末尾
	while(*dest++ = *src++);
}

void _strncat(char *dest,const char *src,int size)//个人感觉这块写的不是太好 
{
	if(size<=0){
		printf("ERROR\n");
		return;
	}
	const char *start=src;
	while(*++dest);//指针移向dest的末尾 
	while(*src++ && size--);
	src--;
    for(;start<src;*dest=*start,start++,dest++);
    *dest='\0';
}
//============================================================ 
char *_strchr(char *str,const char dest)//从左寻找字符串str里的第一个出现的字符dest,返回值为出现位置对应的指针 
{
	for(;*str;str++) if(*str==dest)return str;
	printf("NULL\n");
	return NULL;
}

char *_strrchr(char *str,const char dest)//从右寻找字符串str里的第一个出现的字符dest,返回值为出现位置对应的指针
{
	char *start=str;
	while(*++str);
	for(;str!=start;str--) if(*str==dest)return str;
	printf("NULL\n");
	return NULL;
}
//============================================================ 
char *_strstr(char *dest,const char *src)//从左查找子串 
{
	//计划用KMP算法 实现 
}

char *_strrstr(char *dest,const char *src)//从右查找子串 
{
	
}
//============================================================ 
void _strlwr(char *str)//将所有大写字母化为小写字母 
{
	for(;*str;str++) (*str>='A' && *str<='Z')?(*str=*str-'A'+'a'):(*str=*str);
}

void _strupr(char *str)//将所有小写字母化为大写字母 
{
	for(;*str;str++) (*str>='a' && *str<='z')?(*str=*str-'a'+'A'):(*str=*str);
}
//============================================================
int main()
{
	#ifdef TEST
	
	/*测试strlen*/ 
	printf("strlen:\n");
	char s[30]="abcde";
	printf("%d\n",_strlen(s));
	//printf("%d\n\n",dec_strlen(s));
	
	/*测试strcpy*/ 
	printf("strcpy:\n");
	char s1[30]="fghijklmn";
	_strncpy(s,s1,5);
	printf("%s\n\n",s);
	
	/*测试strcmp*/
	printf("strcmp:\n");
	printf("%d\n\n",_strncmp("abcde","abcdefg",5));
	
	/*测试strcat*/
	printf("strcat:\n");
	char s2[30]="abcde";
	_strncat(s2,"fghijk",3);
	printf("%s\n\n",s2); 
	
	/*测试strchr*/
	printf("strchr:\n");
	printf("%s\n",_strchr("abcdedcba",'f')); 
	printf("%s\n\n",_strrchr("abcdedcba",'c')); 
	
	/*测试strstr*/ 
	
	#else
	
	/*测试strlwr(upr)*/
	printf("strlwr(upr):\n");
	char s3[30]="aBcD123efgH";
	char s4[30]="aBcD123efgH";
	printf("%s\n",s3);
	_strlwr(s3); 
	_strupr(s4);
	printf("%s\n",s3);
	printf("%s\n\n",s4);
	
	#endif
	
	return 0;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值