文字列のよくある操作と用法とc言語の実現、自分のstringを創立する.hライブラリ(一)
説明:文字列は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文字列コピー関数、とてもよく使います!
実装:
2、strncpyレプリケーション指定長さ
3、strcat文字列接合関数
4、strncat接合指定長さ
5、strlen文字列長
6、strcmp文字列比較関数
7、strncmp比較指定長文字列
8、strchr文字列内で指定文字を検索する
9、strrchr文字列の逆検索
10、strstr検索文字列
まとめ:後でまとめます.これはよく使われる文字列関数にすぎません.ご意見をお待ちしています.
多くの重要な操作の基礎なので、私は今いくつかのライブラリの中の関数と実現方法を総括して、みんなが補充して修正することを歓迎します!
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;
}
まとめ:後でまとめます.これはよく使われる文字列関数にすぎません.ご意見をお待ちしています.