string相关函数的实现

  1. strstr函数:char strstr(const char src,const char* dest),返回子串dest第一次在src中出现的位置。
1 char* mystrstr(const char* src,const char* des)
 2 {
 3     assert(src && des);
 4     int n=0;
 5     if (*des=='\0')
 6     {
 7         return const_cast<char* >(src);
 8     }
 9     while (*src!='\0')
10     {
11         for (n=0;*(src+n)==*(des+n);n++)
12         {
13             if (*(des+n+1)=='\0')
14             {
15                 return const_cast<char*>(src);
16             }
17         }
18         src++;
19     }
20     return NULL;
21 }
  1. strcmp函数:int strcmp(const char s1,const char s2),按字典序进行大小判断

    s1>s2,返回1

s1=s2,返回0

s1<s2,返回-1

代码:

1 int mystrcmp(const char* s1,const char* s2)
 2 {
 3     assert(s1&&s2);
 4     int ret=0;
 5     while (*s1!='\0'&&*s2!='\0')
 6     {
 7         ret=*s1-*s2;
 8         if (ret>0)
 9         {
10             return 1;
11         }
12         else if (ret<0)
13         {
14             return -1;
15         }
16         else
17         {
18             s1++;
19             s2++;
20         }
21     }
22     if (*s1=='\0' && *s2=='\0')
23     {
24         return 0;
25     }
26     else if (*s1!='\0' && *s2=='\0')
27     {
28         return 1;
29     }
30     else
31         return -1;
32 }
  1. strncmp函数:int strncmp(const char s1,const char s2,int n),比较s1和s2的前n个字符
1 int mystrncmp(const char* s1,const char* s2,int n)
 2 {
 3     assert(s1 && s2 && n>0);
 4     int tmp=1;
 5     int ret=0;
 6     while (*s1!='\0' && *s2!='\0' && tmp<=n)
 7     {
 8         ret=*s1-*s2;
 9         if (ret>0)
10         {
11             return 1;
12         }
13         else if (ret<0)
14         {
15             return -1;
16         }
17         else
18         {
19             s1++;
20             s2++;
21             tmp++;
22         }
23     }
24     if (tmp>n)
25     {
26         return 0;
27     }
28     else
29     {
30         if (*s1=='\0' && *s2=='\0')
31         {
32             return 0;
33         }
34         else if (*s1!='\0' && *s2=='\0')
35         {
36             return 1;
37         }
38         else
39             return -1;
40     }
41 }
  1. strcpy函数 char strcpy(char dest,const char src),将src中的字符拷贝到dest中,前提是是dest不能是const char 并且要有足够的空间装载src中的字符。
1 char* mystrcpy(char* dest,const char* src)
2 {
3     assert(dest && src);
4     char* tmp=dest;
5     while ((*dest++=*src++)!='\0');
6     return tmp;
7     
8 }

如果像下面这样调用是不行的:

char* s1="wer";

char* s2="your"

mystrcpy(s1,s2);

最初想法是将s2内容拷贝到s1中,但是C++默认char* 是常量字符串,即s1是常量不能被改变。正确的使用方法是:

char* s1="I love you!";

char s2[20];

cout<<mystrcpy(s2,s1)<<endl;

或者:

char s1="I love you!";

char
s3=new char[strlen(s1)+1];

cout<<mystrcpy(s3,s1)<<endl;

  1. strncpy函数:char strncpy(char dest,cosnt char* src,int n),拷贝src的前n个字符到dest中,dest必须有足够的内存来存储src的前n个字符。用法和strcpy基本相同,也是不安全的,因为没有检查dest是否有足够的空间。一般的使用方式将n置为dest串的长度,并且保证dest的长度大于src的长度。

原文链接: https://www.cnblogs.com/ZJUKasuosuo/archive/2012/09/17/2688350.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/63069

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午10:44
下一篇 2023年2月9日 上午10:45

相关推荐