实现一些常用字符串处理函数

简介:

1、字符串copy函数strcpy,实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
#include <assert.h>
char  *mystrcpy( char  *dest, const  char  *sor) //将源字符sor串拷到目的字符串dest
{
     assert (dest);
     assert (sor);
     char  *ret = dest;
     while (*dest++ = *sor++)
     {
         ;
     }
     return  ret;
}

2、判断一个字符串中的子字符串strstr,实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <assert.h>
#include <stdio.h>
char  *mystrstr( char  *str_one, char  *str_two) //判断str_two字符串是不是str_one字符串的子字符                                           //串
{
     char  *pstr_one = NULL;
     char  *pstr_two = NULL;
     while (*str_one)
     {
         pstr_one = str_one;
         pstr_two = str_two;
         while ((*pstr_one)&&(*pstr_one == *pstr_two))
         {
             pstr_one++;
             pstr_two++;
             if (*pstr_two ==  '\0' )
             {
                 return  str_one;
             }  
         }
         str_one++;
     }
     return  NULL;
}

3、三种方法实现求取字符串长度strlen:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <assert.h>
//计数器实现strlen
//int mystrlen(const char *dest)
//{
//  assert(dest);
//  int count  = 0;
//  while(*dest)
//  {
//      count++;
//      dest++;
//  }
//  return count;
//}
//指针实现strlen
//int mystrlen(const char *dest)
//{
//  assert(dest);
//  int ret = 0;
//  const char *buff = dest;
//  while(*dest)
//  {
//      dest++;
//  }
//  ret = dest - buff;
//  return ret;
//}
//递归实现strlen
int  mystrlen( const  char  *dest)
{
     assert (dest);
     if (*dest ==  '\0' )
     {
         return  0;
     }
     dest++;
     return  1+mystrlen(dest);
}

4、字符串的比较strcmp,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <assert.h>
int  mystrcmp( const  char  *cmp1, const  char  *cmp2)
{
     assert (cmp1);
     assert (cmp2);
     int  ret = 0;
     while (!(ret = (*(unsigned  char *)cmp1 - *(unsigned  char *)cmp2))&&*cmp2)
     {
         cmp1++;
         cmp2++;
     }
     if (ret>0)
         return  1;
     else  if (ret<0)
         return  -1;
     return  0;
}

5、字符串链接函数strcat,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <assert.h>
char  *mystrcat( char  *dest, const  char  *sor)
{
     assert (dest);
     assert (sor);
     char  *ret = dest;
     while (*dest)
     {
         dest++;
     }
     while (*dest++ =*sor++)
     {
         ;
     }
     return  ret;
}

注意:对于一些特别的符号字符串处理函数就不能很好的解决了,比如要复制或链接两个内容都是'\0',这样就不能很好解决问题。因此就引入了内存的复制和移动函数。

6、拷贝函数,memcpy函数,有三个参数,两个空类型指针(也叫做句柄)(表示可以接受任何类型的指针),一个count字符串大小。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <assert.h>
void  *mymemcpy( void  *dest, const  void  *sor, int  count)
{
     assert (dest);
     assert (sor);
     char  *pdest = ( char  *)dest;
     char  *psor = ( char  *)sor;
     void  *ret = dest;
     while (count--)
     {
         *pdest++ = *psor++;
     }
     return  ret;
}

注意这个函数的的缺点:导致内容被覆盖:

a b c d e f g h i j

比如:如果不abcd拷贝到cdef,则会导致cd被ab覆盖,输出的结果为:abababghij而不是:ababcdghij

因此引入,memmove函数。

7、memmove函数,拷贝内存函数,很好的解决的memcpy的不足,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <assert.h>
void  *mymemmove( void  *dest, const  void  *sor, int  count)
{
     assert (dest);
     assert (sor);
     char  *pdest = ( char  *)dest;
     char  *psor = ( char  *)sor;
     void  *ret = dest;
     if (pdest>psor&&pdest<psor+count) //从后向前复制,这样就很好解决了memcpy的覆盖问题
     {
         while (count--)
         {
             *(pdest+count) = *(psor+count);
         }
     }
     else
     {
         while (count--)           
         {
             *pdest++ = *psor++;
         }
     }
     return  ret;
}




本文转自 8yi少女的夢 51CTO博客,原文链接:http://blog.51cto.com/zhaoxiaohu/1719395,如需转载请自行联系原作者

相关文章
|
7月前
|
C++
18字符串处理函数
18字符串处理函数
27 0
|
29天前
|
安全
字符串处理
String类: String是一个不可变类,一旦创建就不能修改。 String greeting = "Hello"; greeting = greeting + " World!"; System.out.println(greeting); // 输出: Hello World! StringBuilder和StringBuffer: 这两个类用于可变字符串操作,StringBuilder在单线程环境下使用,而StringBuffer是线程安全的。 StringBuilder sb = new StringBuilder("Hello"); sb
|
1月前
c常用 字符串处理函数
字符串处理函数 puts()将一个字符串输出到终端 gets()从终端输入一个字符串到字符数组,并且得到一个函数值。 strcat()链接两个字符数组中的字符串。 strcpy()字符串复制函数。 strcmp()比较字符串作用。 strlen()测试字符串长度的函数不包括“\0” strlwr()将字符串中的大写字母转换为小写字母。 strupr()将字符串中的小写字母转换为大写字母。
48 7
|
6月前
字符串\字符串处理常用函数
字符串\字符串处理常用函数
40 2
|
7月前
|
索引 Python
使用字符串处理函数的文章
在编程中,字符串处理是一项常见的任务,涉及到对文本数据的各种操作,如查找、替换、分割、连接等。为了简化这些操作,许多编程语言都提供了一系列的字符串处理函数。本文将介绍一些常用的字符串处理函数,并附上相应的代码示例。
32 0
C/C++字符串处理函数
C/C++字符串处理函数
字符串处理函数总结
使用字符串处理函数 注意:在使用后字符串处理函数时,应当在程序文件的开头用
87 0