文字列のよくある操作と用法とc言語の実現、自分のstringを創立する.hライブラリ(一)

3626 ワード

説明:文字列はc言語の重要な知識点であり、ポインタとのつながりが大きく、難点であり、文字列操作を熟練することはc言語の学習にとって極めて重要である.
多くの重要な操作の基礎なので、私は今いくつかのライブラリの中の関数と実現方法を総括して、みんなが補充して修正することを歓迎します!
1)文字列操作
strcpy(p,p 1)複製文字列strncpy(p,p 1,n)複製指定長文字列strcat(p,p 1)付加文字列strncat(p,p 1,n)付加指定長文字列strlen(p)取文字列長strcmp(p,p 1)比較文字列strcasecmp大文字小文字比較文字列strncmp(p,p 1,n)比較指定長文字列strchr(p,c)指定文字strrchr(p,c)を文字列内で逆方向に検索strstr(p,p 1)を検索ターゲット文字列のすべての文字を集合としてstrpbrk(p,p 1)を検索し、現在の文字列でその集合の任意の要素strspn(p,p 1)を検索ターゲット文字列のすべての文字を集合として、現在の文字列では、その集合に属す任意の要素のオフセットstrcspn(p,p 1)を対象文字列のすべての文字を集合とし、現在の文字列では、その集合に属する任意の要素のオフセット*指定された長さの文字列処理関数を検索する、処理された文字列の後にゼロエンド文字を埋める.
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;
}

まとめ:後でまとめます.これはよく使われる文字列関数にすぎません.ご意見をお待ちしています.