这些只能比较字符串,和char型的数组,int型的无法比较
1.strlen函数
strlen 函数使用时包含 #include<string.h>头文件
计算的是字符串的长度,一直识别到“/0”才结束,不包含/0
如果给定的字符串中不包含/0,则会产生一个随机值,因为strlen函数没有识别到/0
第一个arr 输出的len值则是6而第二个放bit的arr数组中输出的len值则为一个随机值
而strlen则返回的是无符号整型,size_t的 也就是 只有正整数 没有负数
2.模拟实现strlen函数
const char*str为该指针是一个常量 无法修改该指针的大小,防止应用时出现错误。
而assert 为断言 该指针不为空,如果为空则会报错
3.strcopy
char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
需要注意的是如果目标数组 dest 不够大,而源字符串的长度又太长,可能会造成缓冲溢出的情况。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<assert.h> char* my_strlen(char* dest, const char* post) { assert(dest && post); char * ret =dest ; while ( *post != '\0') { *dest++ = *post++; } return ret; } int main() { //模拟实现字符串的拷贝函数 char arr[5] = "abcd"; char arr1[3] = "ef"; my_strlen(arr, arr1); printf("%s", arr); return 0; } // 1. int main() //{ // char arr[5] = "abcd"; // char arr1[3] = "ef";//默认后面有一个/0 // //而strcpy在拷贝时 会遇到/0自动停止拷贝 // //而arr前面较长的cd则会被覆盖 // //strcpy(arr, arr1);写法1,数组arr必须足够长 才能够把arr1中的内容拷贝进去 // strcpy(arr, "efg");//写法二 // printf("%s", arr); // return 0; //}
4.strcat
strcat字符串追加 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char* my_stract(char* arr, const char* arr1) { char* ret = arr; while (*arr != '\0') { arr++; } while(*arr++=*arr1++) { } return ret; } int main() { char arr[20] = "hello "; char arr1[] = "world"; //strcat(arr, arr1); my_stract(arr, arr1); printf("%s", arr); return 0; }
这是c语言代码,模拟实现字符串的追加
5. strcmp
int strcmp(const char *str1, const char *str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较 值得我们注意的是 该函数是int型的 返回的值是大于0 等于0 和小于0的三个数字
字符串比较的不是比较字符串的长度,比较的是字符的大小 例如
abcde
abd 这两个字符串 a和a比相同 b和b比相同,然后c和d比 发现d比c大,而比较的是字符中的 ascii 所以返回的是第二个字符串大
下面我们用c语言模拟实现这个函数
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<assert.h> int my_strcmp(const char* arr, const char* arr1) { assert(arr && arr1); while (*arr == *arr1) { if (*arr == '\0') { return 0; } arr++; arr1++; } if (*arr > *arr1) { return 1; } else return -1; } int main() { char arr[10] = "abc"; char arr1[10] = "abcd"; int ret = my_strcmp(arr, arr1); if (ret > 0) { printf("大于"); } if (ret == 0) { printf("等于"); } if(ret<0) { printf("小于"); } return 0; }