-------------------------------------------------------------------------------------------

       C语言中没有字符串类型,但是为了方便对字符串进行操作,提供了许多字符串处理函数。如:

输入输出字符串,字符串的拷贝,连接,比较等操作函数。值得注意的是:在使用输入输出,即gets、

puts函数时应该引入头文件<stdio.h>。在使用其他操作函数时,引入头文件<string.h>。另外,在使用连

接和拷贝字符串函数时,必须保证目标字符数组剩余空间足够放下新字符串和字符串结束标志'\0'。

-------------------------------------------------------------------------------------------


C语言代码如下:

/*
**功能:把src中的字符串拷贝到dst中。串结束标志'\0'也一同拷贝。
**src,也可以是一个字符串常量。
*/
char* my_strcpy(char *dst, const char *src)
{
     assert(dst);
     assert(src);
    
     char *ret = dst;
    
     while (*dst++ = *src++)
     {
          ;
     }
     return (ret);
}



/*
**功能:把src的字符串连接到dst中字符串的后面,并删去dst后的串标志“\0”。
**本函数返回值是dst的首地址。
*/
char* my_strcat(char *dst, const char *src)
{
     assert(dst);
     assert(src);
     char *ret = dst;
     
     /*
     **寻找'\0',即dst的最后一位
     */
     while (*dst)
     {
          dst++;
     }
     /*执行拷贝*/
     while (*dst++ = *src++)
     {
          ;
     }
     return (ret);
}


/* 
**功能:按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。
**字符串1=字符串2,返回值=0;
**字符串2〉字符串2,返回值〉0;
**字符串1〈字符串2,返回值〈0。
*/
int my_strcmp(const char *dst, const char *src)
{
     assert(dst);
     assert(src);
    
     while (*dst == *src)
     {
          if (*dst == '\0')
          {
               return (0);
          }
          dst++;
          src++;
     }
     if ((*dst - *src) > 0)
          return (1);
     else
          return (-1);
}


/*
**功能:测字符串的实际长度(不含字符串结束标志‘\0’)并作为函数返回值。
*/
int my_strlen(const char *dst)
{
     assert(dst);
    
     int ret = 0;
    
     while (*dst++)
     {
          ret++;
     }
     return (ret);
}


/*
**功能:判断src是否是dst的子串,如果是,则返回第一个相等字符的地址,否则返回NULL。
*/       
char* my_strstr(char *dst, char *src)
{
     assert(dst);
     assert(src);
     
     char *pdst = dst;
     char *psrc = src;
     char *tmp = NULL;
    
     if (*src == '\0')
          return (dst); 
     /*
     **如果第一个之后的字符不相等,
     **dst跳到第一次相等的下一个字符的位置。
     */
     while ((*pdst) && (*psrc))
     {
          tmp = pdst;
          
          while((*pdst == *psrc) && (*psrc))
          {
               pdst++;
               psrc++;
          }
          if (*psrc == '\0')
          {
               return (tmp);
          }
          else
          {
               pdst = tmp;
               psrc = src;
               pdst++;
          }
     }
     return (NULL);
}

 

--------------------------------------------------------------------------------------------

   干货小知识:(void *)可以接收任意类型的指针,但要想在次使用,必须进行强制类型转换。

--------------------------------------------------------------------------------------------