1.strlen函数的使用和模拟实现
size_t strlen ( const char * str);
1、strlen函数是用来求字符串长度的函数,它的参数必须是字符串的地址,并且是以’\0‘作为结束标志
2、strlen函数的返回类型是无符号整形,所以两个strlen(arr1)-strlen(arr2)的结果不可能为负数,这样比较字符串长度的方式是不对的
3、strlen函数所需要的头文件为<string.h>
strlen函数的应用
#include<stdio.h> #include<string.h> int main() { char arr1[] = "abcdef"; char arr2[] = "bbbbb"; if (strlen(arr1) - strlen(arr2) > 0)/*这就是上面提到的错误, 因为strlen返回类型为无符号整型,所以当这两个数相减为负值时实际上在内存中是一个很大的正整数*/ { printf(">\n"); } else { printf("<=\n"); } return 0; }
strlen函数的模拟实现
方法1:
//创建临时变量 int my_strlen(const char* str) { int count = 0; assert(str); while (*str != '\0') { count++; str++; } return count; }
方法2:
//使用递归 int my_strlen(const char* str) { assert(str); if (*str == '\0') return 0; else return 1 + my_strlen(++str); }
方法3:
//指针-指针 int my_strlen(const char* str) { assert(str); char* p = str; while (*str != '\0') { str++; } return str - p; }
上面的几种模拟实现strlen函数的方法都涉及到assert函数,如果有不理解可以看我之前一篇:C语言——assert函数
2.strcpy函数的使用及模拟实现
char* strcpy(char * des,const char * source );
1、strcpy函数返回类型为指针
2、strcpy函数会将源字符串后第一个'\0'一并复制到目标字符串
3、目标字符串的空间必须足够大,不然容易造成溢出
strcpy函数的使用
#include<stdio.h> #include<string.h> int main() { char arr1[] = "abcdef"; char arr2[20] = { 0 }; strcpy(arr2, arr1); printf("%s\n", arr2); return 0; }
strcpy函数的模拟实现
char* my_strcpy(char* arr2, const char* arr1)//函数返回类型为指针 { assert(arr1 && arr2);//确保arr1和arr2都不为空 char* p = arr2; while (*arr2++ = *arr1++)//将arr1中的值一个一个传给arr2 { ; } return p;//返回arr2的原地址 }
3.strcat函数的使用及模拟实现
char* strcpy(char * des,const char * source );
strcat函数返回类型及使用要求与strcpy函数基本一致,可以看上面的
strcat函数的使用
#include<stdio.h> #include<string.h> int main() { char arr1[20] = "I am ";//arr1空间要足够大 char arr2[] = "zhangsan"; strcat(arr1, arr2); printf("%s\n", arr1); return 0; }
strcat函数的模拟实现
char* my_strcat(char* arr1, const char* arr2) { assert(arr1 && arr2); char* p = arr1; while (*arr1 != '\0') { arr1++; } while (*arr2 != '\0') { *arr1 = *arr2; arr1++; arr2++; } return p;//返回arr1的原地址 }
4.strcmp函数的使用及模拟实现
int strcmp(const char * arr1,const char * arr2 );
strcmp函数返回类型是整形,大于返回整数,小于返回负数,等于返回0
strcmp函数的使用
#include<stdio.h> #include<string.h> int main() { char arr1 = "abcdef"; char arr2 = "bbbbb"; int ret = strcmp(arr1, arr2); if (ret > 0) { printf(">\n"); } else if (ret < 0) { printf("<\n"); } else { printf("=\n"); } return 0; }
strcmp函数的模拟实现
int my_strcmp(const char* arr1, const char* arr2) { asssrt(arr1 && arr2); while (*arr1 == *arr2) { if (*arr1 == '\0') return 0; arr1++; arr2++; } return *arr2 - *arr1; }
5.字符转换函数
C语言提供两种字符转换函数:
char towlower(char c);//将传进去的大写字母转换成小写字母 char towupper(char c);//将传进去的小写字母转换成大写字母
函数使用
#include<stdio.h> #include<string.h> int main() { printf("%c\n", towlower('A')); printf("%c\n", towupper('a')); return 0; }
上面几个函数就是C语言中用的最多的几个字符串函数,在下一篇我们将继续探索C语言中更多的字符串函数,欲知后事,还请点赞加关注,在接下来的一篇,我们将一同探索strstr、strtok、strerror等更多字符串函数。
创作不易,还请一键三连!!!