自写字符串操作函数

来源:互联网 发布:cad软件培训班 编辑:程序博客网 时间:2024/06/04 19:02

【字符操作函数】


 1.strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:
    char *strstr( const char *dest,const  char * src );

【参数说明】dest为要检索的字符串,src为要检索的子串。

【返回值】返回字符串str中第一次出现子串src的地址;如果没有检索到子串,则返回NULL


【函数实现】

#include <stdio.h>char* my_strstr(const char *dest,const char *str){     char *ptr=(char *)dest;     char *p1=NULL;     char *p2=NULL;     while (*ptr)     {         p1=ptr;         p2=(char *)str;         while (*p1==*p2)        {             p1++;             p2++;             if (*p2=='\0')            {                 return ptr;            }        }        ptr++;     }     return NULL;}

结果:

wKiom1ZeeL-yYkAyAAAOOUfndEo897.png

2.strcat()函数用来连接字符串,其原型为:

    char *strcat(char *dest ,const char *src)


【参数】dest 为目的字符串指针,src 为源字符串指针。


        strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。

注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

【返回值】返回dest 字符串起始地址。

【函数实现】

#include <stdio.h>#include <assert.h>#define MAXLINE 100char* my_strcat(char *dest,const char *src){     char *pstr=dest;     assert(dest);     assert(src);     while (*dest)     {          dest++;     }     while (*dest++=*src++)     {          ;     }     return pstr;}int main(){     char arr[MAXLINE]="abcd";     char *p="efgh";     char *ret=my_strcat(arr,p);     printf("%s\n",ret);     return 0;}


结果:

wKioL1Zef9vjVIB6AAAPbgpW1AM860.png


3.strcmp()函数用来比较字符串大小,其原型为:

    

int strcmp( const char *dest, const char *src)

【参数】dest,src为需要比较的两个字符串。

字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将dest 第一个字符值减去src 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。

【返回值】若参数dest 和src 字符串相同则返回0。dest  若大于src从则返回大于0 的值。dest  若小于src则返回小于0 的值。

注意:strcmp() 以二进制的方式进行比较

【函数实现】

#include <stdio.h>#include <assert.h>int my_strcmp(const char *str1,const char *str2){     assert(str1);     assert(str2);     while (*str1 == *str2)     {          if (*str1 == '\0')         {               return 0;         }         str1++;         str2++;     }     return (*str1 - *str2);}int main(){     char *str1="abcde";     char *str2="abcfe";     int ret = my_strcmp(str1,str2);     if (ret > 0)     {          printf("str1 > str2\n");     }     else if(ret < 0)     {          printf("str1 < str2\n");     }     else          printf("str1 =str2\n");     return 0;}

结果:

wKiom1ZeoR2ifBUpAAAQErzOS7E669.png

4.strlen()函数用来计算字符串长度,其原型为:

size_t strlen( const char *string );    

【参数说明】string为指定的字符串。

strlen()用来计算指定的字符串string 的长度,不包括结束字符"\0"。

【返回值】返回字符串string 的字符数。


【注意】 strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。

【函数实现】

/**计数器方法实现*/#include <stdio.h>#include <assert.h>int my_strlen(const char *str){     int count=0;     assert(str);//断言     while (*str)     {            count++;            str++;     }     return count;}int main(){      char arr[]="abcde";      int ret=my_strlen(arr);      printf("%d\n",ret);      return 0;}/***递归方法实现*/#include <stdio.h>#include <assert.h>int my_strlen(const char *str){      assert(str);      if (*str=='\0')      {            return 0;      }      else      {            return (1+my_strlen(str+1));      }}int main(){      char arr[] = "abcde";      int ret = my_strlen(arr);      printf("%d\n",ret);      return 0;}/***指针方式实现*/#include <stdio.h>int my_strlen(const char *str){       const char *p=str;      while (*str)      {            str++;      }      return str-p;}int main(){      char arr[]="abcde";      int ret=my_strlen(arr);      printf("%d\n",ret);      return 0;}

结果:

wKioL1ZepDqDUh_rAAAPd59G4Jo548.png

5.strcpy()函数,函数原型

    char *strcpy(char *dest, const char *src);

【函数说明】:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。

【返回值】:返回参数dest 的字符串起始地址。


【函数实现】

#include <stdio.h>#include <assert.h>#define MAX 20void my_strcpy(char *dest,char *str){     assert(dest);     assert(str);     while (*dest++=*str++);}int main(){     char arr[MAX]={0};     char *ps="abcde";     my_strcpy(arr,ps);     printf("%s\n",arr);     return 0;}

结果:

wKiom1ZepRbg3eLaAAAQbljlWb4924.png


注意:为什么结果是abcde呢?后面的0怎么没有打印出来,因为字符串是以‘\0’作为结束标志的,而‘\0’的对应的ASCII码值正好是0,所以就自然而然的结果是abcde了!

本文出自 “Pzd流川枫” 博客,请务必保留此出处http://xujiafan.blog.51cto.com/10778767/1718912

0 0
原创粉丝点击