字符串常见操作及用法及c语言实现,建立自己的string.h库(一)

      说明:字符串是c语言中的一个重要知识点,其与指针的联系很大,是一个难点,熟练掌握字符串操作对学习c语言至关重要,

是很多重要操作的基础,所以我现在来总结一些一些库里面的函数以及实现方法,欢迎大家补充和改正!

1)字符串操作 

strcpy(p, p1) 复制字符串 
strncpy(p, p1, n) 复制指定长度字符串 
strcat(p, p1) 附加字符串 
strncat(p, p1, n) 附加指定长度字符串 
strlen(p) 取字符串长度 
strcmp(p, p1) 比较字符串 
strcasecmp忽略大小写比较字符串
strncmp(p, p1, n) 比较指定长度字符串 
strchr(p, c) 在字符串中查找指定字符 
strrchr(p, c) 在字符串中反向查找 
strstr(p, p1) 查找字符串 
strpbrk(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找该集合的任一元素 
strspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找不属于该集合的任一元素的偏移 
strcspn(p, p1) 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移  
* 具有指定长度的字符串处理函数在已处理的字符串之后填补零结尾符 .

1、strcpy字符串复制函数,非常常用!

实现:

char* str_cpy(char* dest,const char* src)
{
	if((src==NULL)||(dest==NULL))
	{
		return NULL;
	}
	char* strdest=dest;
	while(*src!='\0')
	{
		*dest++=*src++;
		if(*src=='\0')
		{
			*dest='\0';
		}
	}
	
//	while((*dest++=*src++)!='\0');
	return strdest;
}

2、strncpy复制指定长度

char* strn_cpy(char* dest,const char* src,int  n)
{
	if ((src==NULL)||(dest==NULL)||n<=0)
	{
		return NULL;
	}

	char* strdest=dest;
	while(n--)
	{
		*dest++=*src++;

	}
	*dest='\0';
	return strdest;
}

3、strcat字符串拼接函数

char* str_cat(char* dest,const char* src)
{
	if((src==NULL)||(dest==NULL))
	{
		return NULL;
	}

	char* strdest=dest;
	
	while((*dest++)!='\0');
	dest--;
	while((*dest++=*src++)!='\0');
	return strdest;
}

4、strncat拼接指定长度

char* strn_cat(char* dest,const char* src,int n) 
{
	if((src==NULL)||(dest==NULL)||n<0)
	{
		return NULL;
	}
	char* strdest=dest;
	while((*dest++)!='\0');
	dest--;
	while(n--)
	{
		*dest++=*src++;
	}
	*dest='\0';
	return strdest;
}

5、strlen字符串长度

int str_len(const char* str)
{
	if(str==NULL)
	{
		return 0;
	}
	int count=0;
	while(*str++!='\0')
	{
		count++;
	}
	return count;
}

6、strcmp字符串比较函数

int str_cmp(const char* src,const char* dest)
{	

	if((src==NULL)||(dest==NULL))
	{
		return NULL;
	}
	int ret;
	while(!(ret=*src-*dest)&&(*dest))
	{
		src++;
		dest++;
	}
	if (ret<0)
	{
		return -1;/* code */
	}
	if(ret>0)
	{
		return 1;
	}
	return 0;

}

7、strncmp 比较指定长度字符串 

int strn_cmp(const char* dest,const char* src,int n)
{
	if((src==NULL)||(dest==NULL))
	{
		return -2;
	}
	int ret;
	while((n-->0)&&!(ret=*dest-*src)&&(*src))
	{
		
			dest++;
			src++;
		
	}
	if (ret<0)
	{
		return -1;
	}
	if(ret>0)
	{
		return 1;
	}
	return 0;

}


8、strchr在字符串中查找指定字符 

char* strchr(const char* str,char c)
{
	if(str==NULL)
	{
		return NULL;
	}
	while(*str!='\0')
	{
		if (*str==c)
		{
			return (char*) str;
		}
		str++;
	}
	return NULL;
}


9、strrchr 在字符串中反向查找 

/*查找一个字符c在一个字符串s中最后一次出现的位置
(也就是从s的右侧开始查找字符c首次出现的位置),
并返回从字符串中的字符c所在的位置开始直到字符串s结束的所有字符。 
若没有找到字符c,则返回NULL*/
char* strrchr(const char* str,char c)
{
	if (src==NULL)
	{
		return NULL;/* code */
	}
	char* p_str=NULL;
	while(*str!='\0')
	{
		if(*str==c)
		{
			p_str=(char*)str;
		}
		str++;

	}
	return p_str;
}


10、strstr查找字符串 

char* strstr(const char* dest,const char* src)
{
	if (dest==NULL||src==NULL)
	{
		return NULL;
		/* code */
	}
	int i=0;
	int j=0;
	for(i=0;dest[i]!='\0';i++)
	{
		int tmp=i;
		j=0;
		while(dest[i++]==src[j++])
		{
			if(src[j]=='\0')
			{
				return &dest[tmp];
			}
		}
		i=tmp;
	}
	return NULL;
}

总结:后面还会继续总结,这只是一些常用的字符串函数,欢迎大家提出意见!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值