C语言字符串常见操作-strcpy、strlen、strcat和strcmp实现
1. 字符串的拷贝strcpy的实现
1 2 3 char *myStrcpy(char *dst,char *src) 4 { 5 char *ret = dst; 6 if(dst == NULL || src == NULL) 7 { 8 return NULL; 9 } 10 while((*dst++ = *src++)!= '\0') 11 ; 12 *dst = '\0'; 13 return ret; 14 }
2.返回字符串长度strlen实现
1 unsigned int myStrlen(const char *src) 2 { 3 // 安全性检查 4 if(src == NULL) 5 { 6 return 0; 7 } 8 const char *end = src; 9 // 返回的是'\0'之前的长度,不把'\0'算在内 10 while (*end++ != '\0') 11 ; 12 return (unsigned int)(end - src); 13 14 }
3.字符串连接strcat实现
注意调用者必须保证dst有足够的空间否则造成内存越界
1 char *myStrcat(char *dst,const char *src) 2 { 3 if(dst == NULL || src == NULL) 4 { 5 return NULL; 6 } 7 char *ret = dst; 8 // 将指针指向字符串结尾处 9 while(*dst != '\0') 10 dst++; 11 // 执行和strcpy一样的操作 12 while ((*dst++ = *src++) != '\0') 13 ; 14 return ret; 15 }
4.字符串比较函数strcmp实现
1 int myStrcmp(char *strA,char *strB) 2 { 3 int val = 0; 4 5 if(strA == NULL || strB == NULL) 6 { 7 return val; 8 } 9 // 将指针指到不相等处 10 while ((*strA != '\0') && (*strB != '\0') && (*strA == *strB)) 11 { 12 strA++; 13 strB++; 14 } 15 16 // 注 如果不是返回 -1 0 1则此处直接使用 return *strA - *strB 即可 17 18 // 不相等要判断是大于还是小于 19 if(*strA != *strB) 20 { 21 val = *strA > *strB ? 1 : -1; 22 } 23 else 24 { 25 val = 0; 26 } 27 28 return val; 29 }