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 }

 

posted @ 2015-04-03 23:34  HugoJiang  阅读(482)  评论(0编辑  收藏  举报