多增加了一个字节个数,即拷贝几个字节,更加有了限制
这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!
6.strncat
多增加了一个字节个数,即追加几个字节,更加有了限制
这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!
7.strncmp
多增加了一个字节个数,即比较几个字节,更加有了限制
这样会更多考虑源字符串和目的字符串的空间大小,更加的严谨!!
二、模拟实现
1.strlen
代码如下(示例):
法一:计数器方式
#include<stdio.h> #include<assert.h> int my_strlen(char* p) { assert(str); //防止str为空指针 int count = 0; while (*p++) { count++; } return count; } int main() { char arr[] = "abcdef"; int ret = my_strlen(arr); printf("%d", ret); return 0; }
法二:递归,不创建临时变量
#include<stdio.h> #include<assert.h> int my_strlen(char *str) { if (*str== '\0') { return 0; } else { return my_strlen(str+1) + 1; } } int main() { char arr[] = "abcdef"; int ret = my_strlen(arr); printf("%d", ret); }
法三:指针减指针
#include<stdio.h> #include<assert.h> int my_strlen(char* str) { char* p = str; while (*p!= '\0') { p++; } return p - str; } int main() { char arr[] = "abcdef"; int ret = my_strlen(arr); printf("%d", ret); }
2.strcpy
代码如下(示例):
#include<stdio.h> #include<assert.h> char * my_strcpy(char* dest, const char* src) { assert(dest && src); char* p = dest; while (*dest++ = *src++); return p; } int main() { char arr1[] = "aaaaaaaaa"; char arr2[] = "bbbbbbbb"; my_strcpy(arr1,arr2); printf("%s", arr1); }
3.strcat
代码如下(示例):
先找斜杠零,再拷贝.
#include<stdio.h> #include<assert.h> char* my_strcat(char* dest,const char* src) { char* p = dest; assert(dest && src); while (*dest) { dest++; } while (*dest++ = *src++); return p; } int main() { char arr1[20] = "aaaaaa"; char arr2[] = "bbbbbbbb"; my_strcat(arr1,arr2); printf("%s", arr1); return 0; }
4.strcmp
代码如下(示例):
#include<stdio.h> #include<assert.h> int my_strcmp(const char* str1, const char* str2) { assert(str1 && str2); //法一 while (*str1) { while (*str1 != *str2) { return *str1 - *str2; } str1++; str2++; } return 0; //法二 while (*str1 == *str2) { if (*str1=='\0') return 0; str1++; str2++; } return *str1 - *str2; } int main() { char arr1[] = "abddd"; char arr2[] = "abc"; int ret=my_strcmp(arr1,arr2); if (ret > 0) printf("str1大\n"); else if (ret < 0) printf("str2大\n"); else printf("一样大\n"); return 0; }
5.strncat
void my_strncat(char* dest, char* src, int n) { while (*dest) { dest++; } while (n--) { *dest++= *src++; } *dest = '\0'; } int main() { char arr1[6] = "aa"; char arr2[] = "bbbbb"; my_strncat(arr1, arr2,3); printf("%s", arr1); }
总结
在使用字符串函数的时候,要注意的是函数的返回值和参数的使用,以及源字符串和目的字符串的空间大小!
我们下期再见!