1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > C语言字符串库函数strlen strcpy strcat strcmp strstr使用详解及其实现

C语言字符串库函数strlen strcpy strcat strcmp strstr使用详解及其实现

时间:2018-12-01 21:41:42

相关推荐

C语言字符串库函数strlen strcpy strcat strcmp strstr使用详解及其实现

写在前面:现在在刷简单题的时候,老是遇到字符串操作的题,用c语言自己实现很麻烦,其实c语言也有很多对字符串操作很方便的库函数。这个博客写来一是为了巩固自己一下自己学的知识,二也可以方便大家查询。

一. 使用详解(都包含在头文件<string.h>中)

1、strlen

定义:

size_t strlen ( const char * str );//strlen返回的时在字符串中'\0'前出现的字符个数(不包含'\0'),若没有'\0'则返回随机值//返回值为size_t类型,是无符号的

功能:求一个字符串的长度(元素个数)

2、strcpy

定义:

char* strcpy(char * destination, const char * source );//源字符串必须以 '\0' 结束。//会将源字符串中的 '\0' 拷贝到目标空间。//目标空间必须足够大,以确保能存放源字符串。//目标空间必须可变。

功能:将一个字符串完整地拷贝到目标字符串中

3、strcat

定义:

char * strcat ( char * destination, const char * source );//源字符串必须以 '\0' 结束。//目标空间必须有足够的大,能容纳下源字符串的内容。//目标空间必须可修改。

功能:将一个字符串(source)中的内容追加到另一个字符串(destination)中

4、strcmp

定义:

int strcmp ( const char * str1, const char * str2 );

功能:比较两字符串的大小

第一个字符串大于第二个字符串,则返回大于0的数字(有些编译器返回1)

第一个字符串等于第二个字符串,则返回0

第一个字符串小于第二个字符串,则返回小于0的数字(有些编译器返回-1)

5、strstr

定义:

char * strstr ( const char *str1, const char * str2);

功能:在str1中查找与str2内容相同的部分,若找到了,则返回该部分字符串的地址,若没有则返回NULL

二. 模拟实现

1、模拟实现strlen

//三种方式//方式一:计数器int my_strlen(const char* str){int count;while(*str){count++;str++;}return count;} //方式二:递归int my_strlen(const char* str){if(*str=='\0')return 0;elsereturn 1+my_strlen(str+1);} //方式三:指针减指针int my_strlen(const char* str){char* p=str;while(*p!='\0'){p++;}return p-str;}

2、模拟实现strcpy

//模拟实现strcpy://将源字符串中的内容全部复制到目标控空间中,返回一个char* char* my_strcpy(char* dest,const char*src){assert(dest !=NULL);assert(src !=NULL);//断言 char* ret=dest; while(*dest++ = *src++){;} return ret; //ret中的值就是dest中的值,他们指向的地址是一样的//所以可以找到dest指向的内容 }

3、模拟实现strcat

//模拟实现strcat:向目标地址追加源地址中字符串的内容char* my_strcat(char* dest,const char* src){char* ret=dest;assert(dest!=NULL);assert(src!=NULL);while(*dest){dest++;}while(*dest++ = *src++){;}return ret;}

4、模拟实现strcmp

//模拟实现strcmp:比较两个字符串的大小,每个字符逐一比较,直到出现差异或是全部比较完//前一个字符串比后一个字符串大返回1(也有些编译器返回大于0的数),小返回-1(也有些编译器返回小于0的数),相等返回0 int my_strcmp(const char* a1,const char* a2){assert(a1 != NULL);assert(a2 != NULL);int ret=0;while(!(ret=*(unsigned char*)a1-*(unsigned char)a2) && *dst){++a1,++a2;}if(ret<0){return -1;}else if(ret>0){return 1;} return 0;}

5、模拟实现strstr

//模拟实现strstr:返回后一个字符串在前一个字符串中的位置(指针),如果没有这一部分则返回NULL //可以去了解一下KMP算法 char* strstr(const char* str1.const char *str2){assert(str1 && str2);char* s1 = str1;char* s2 = str2;char* p = str1;while(*p){s1=p;s2=str2;while(*s1 && *s2 && *s1==*s2){s1++;s2++;}if(*s2=='\0'){return p;}p++;}return NULL;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。