和字符串有关的库函数
函数介绍
-
strlen
*size_t strlen ( const char * str ) ;
作用:用来计算字符串的长度
注意:字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包 含 ‘\0’ )函数使用方式:
#include <stdio.h> #include <string.h> int main() { char str[256]; printf("请输入需要计算长度的字符串: "); gets(str); printf("输入的字符串%s的长度为:%lu\n", str,(unsigned)strlen(str)); return 0; }
结果为:
函数模拟实现:#include <stdio.h> int my_strlen1(char* str) { //利用递归 if (*str == '\0') return 0; return 1 + my_strlen1(str + 1); } int my_strlen2(char* str) { //利用指针相减 char* p = str; while(*str != '\0') ++str; return str - p; } int main() { char str[256]; printf("请输入需要计算长度的字符串: "); gets(str); printf("输入的字符串%s的长度为:%d\n", str, my_strlen1(str)); printf("输入的字符串%s的长度为:%d\n", str,my_strlen2(str)); }
结果为:
2.strcpychar* strcpy ( char * destination,const char * source ) ;
作用:将目标字符串中的内容替换成为源字符串中的内容(拷贝)
注意:目标空间必须足够大,以确保能存放源字符串函数使用方式:
#include <stdio.h> #include <string.h> int main() { char str1[] = "Sample string"; char str2[40]; strcpy(str2, str1); printf("str1: %s\nstr2: %s\n", str1, str2); return 0; }
结果为:
函数模拟实现:#include <stdio.h> char* my_strcpy(char* destination, const char* source) { char* start1 = destination; while (*source != '\0') { *start1 = *source; ++start1; ++source; } *start1 = '\0'; return destination; } int main() { char str1[] = "Sample string"; char str2[40]; printf("str1: %s\nstr2: %s\n", str1,my_strcpy(str2, str1)); }
结果为:
-
strcmp
int strcmp ( const char * str1 , const char * str2 ) ;
作用:依靠字典序来比较两个字符串的长度
注意:
- 如果str1的长度>str2的长度,返回1;
- 如果str1的长度=str2的长度,返回0;
- 如果str1的长度<str2的长度,返回-1;
函数使用方式:
#include <stdio.h> #include <string.h> int main() { char str1[] = "123"; char str2[] = "24"; printf("%d\n", strcmp(str1, str2)); return 0; }
结果为:
函数模拟实现:#include <stdio.h> int my_strcmp(const char* str1, const char* str2) { while (*str1 == *str2) { ++str1; ++str2; } if (*str1 > *str2) return 1; else if (*str1 == *str2) return 0; else return -1; } int main() { char str1[] = "123"; char str2[] = "24"; printf("%d\n", my_strcmp(str1, str2)); }
结果为:
-
strcat
char * strcat ( char * destination , const char * source ) ;
作用:将源字符串连接在目标字符串的后面,并放在目标字符串里面
注意:目标字符串的空间必须足够大,以便可以容纳源字符串的内容函数使用方式:
#include <stdio.h> #include <string.h> int main() { char str1[100]; char str2[40]; gets(str1); gets(str2); strcat(str1, str2); puts(str1); return 0; }
结果为:
模拟实现函数:#include <stdio.h> char* my_strcat(char* destination, const char* source) { char* start = destination; while (*destination != '\0') ++destination; while (*source != '\0') { *destination = *source; ++destination; ++source; } *destination = '\0'; return start; } int main() { char str1[100]; char str2[40]; gets(str1); gets(str2); my_strcat(str1, str2); puts(str1); }
结果为:
-
strstr
char * strstr ( const char * str1 , const char * str2) ;
作用:判定和查找str2是否在str1中
注意:没找到返回NULL函数使用方式:
#include <stdio.h> #include <string.h> int main() { char str1[] = "1455456789"; char str2[] = "456"; printf("%s\n", strstr(str1, str2)); return 0; }
结果为:
函数模拟实现:#include <stdio.h> char* my_strstr(const char* str1, const char* str2) { const char* p1 = str1; const char* p2 = str2; while (*p1 != '\0') { while (*str1 == *str2) { ++str1; ++str2; } if (*str2 == '\0') return p1; ++p1; str1 = p1; str2 = p2; } return NULL; } int main() { char str1[] = "1455456789"; char str2[] = "456"; char str3[] = "457"; printf("%s\n", my_strstr(str1, str2)); printf("%s\n", my_strstr(str1, str3)); }
结果为: