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 }

2. 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 }

3. 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 }

4. 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;

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

 

posted @ 2012-09-17 10:44  kasuosuo  阅读(305)  评论(1编辑  收藏  举报