常用字符串处理函数总结

      我们学习过C语言的都肯定用过头文件里的函数,例如strlen, strcmp, strcpy, strcat, strtok它们是使用字符数组时的常用函数。除此之外,还有常用的itoa和atoi函数。。。
      今天,我们就逐一实现这些库函数。
      函数原型: size_t strlen(const char *str);
              计算但不包括终止空字符\0的字符串str的长度。
  C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include
#include
int  Mystrlen( const   char  *str) 
{
    assert(str != 
NULL );
    
    
int  count  0 ;
    
while (*str !=  NULL )
    {
        count++;
        str++;
    }
    
    
return  count;
}

函数原型: int strcmp(const char *str1, const char *str2);
        比较字符串str1与str2大小。两个字符串的每个字符依次比较,若字符值(ASCII码)差不等于0,返回差值,否则比较下个字符,直到遇到\0。注意:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。
  C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int  Mystrcmp( const   char  *str1,  const   char  *str2)
{
    assert(str1 != 
NULL );
    assert(str2 != 
NULL );
    
    
int  num  0 ;
    
while ((num=*str1-*str2)== 0  && *str1!= '\0' )
    {
        str1++;
        str2++;
    }
    
    
return  num;
}
函数原型: int Mystrcmp(const char *str1, const char *str2, size_t n);
比较字符串str1与str2前n个字节大小。包括\n
  C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int  Mystrncmp( const   char  *str1,  const   char  *str2,  int  n)
{
    assert(str1!=NULL  && str2!=NULL) ;
     int  num  0 ;
    
int   0 ;
    
while ((num=*str1-*str2)== 0  && (i'\0'&&*str2!='\0'))
    {
        i++;
        str1++;
        str2++;
    }
    
    
return num; 
}

函数原型: char *Mystrcpy(char *dest, const char *src);
将src地址开始且含有\0结束符的字符串复制到以dest开始的地址空间,返回值类型为char *。
  C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char  *Mystrcpy( char  *dest,  const   char  *src)
{
    assert(src!=
NULL  && dest!= NULL );
    
    

    
    
char  *p dest;
    
while (*dest++ *src++);
    
    
return  p;
}

函数原型: char *Mystrncpy(char *dest, const char *src, size_t n);
把src指向的字符串的前n个字节复制到dest所指的数组中,返回dest。
  C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
char  *Mystrncpy( char  *dest,  const   char  *src,  int  n)
{
    assert(dest!=
NULL  && src!= NULL );
    
    
int   0 ;
    
for (; src[i]!= '\0' &&i
    {
        dest[i] src[i];
    }
    dest[i] 
'\0' ;
    
    
return  dest;
}

函数原型: char *Mystrcat(char *dest, const char *src);
把src所指的字符串添加到dest的结尾处(覆盖dest结尾处的\0)
  C++ Code 
1
2
3
4
5
6
7
8
9
10
char  *Mystrcat( char  *dest,  const   char  *src) //追加src指向的字符串到dest指向的字符串的结束。
{
    assert(dest!=
NULL  && src!= NULL );
    
    
char  *p dest;
    
for (; *dest !=  '\0' dest++);
    
while (*dest++ *src++);
    
    
return  p;
}
函数原型: int Myatoi(const char *str)
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数. atoi( ) 函数会扫描参数str字符串,跳过前面的空白字符(例如空格,tab缩进等.),直到遇上数字或正负符号才开始做转换,而在遇到非数字或字符串结束时('\0')才结束转换,并将结果返回。如果 str不能转换成 int 或者 str为空字符串,那么将返回 0 。

  C++ Code 
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
int  Myatoi( const   char  *str) //"123a" -->123; "-1234" -->-1234; "a123" -->0;  12" -->12.
{
    
int  flag  1 ;
    
int  num  0 ;
    
while (*str ==  ' )
    {
        str++;
    }
    
if (*str ==  '-' )
    {
        flag -flag;
        str++;
    }
    
else   if (*str ==  '+' )
    {
        str++;
    }
    
    
while (isdigit(*str))
    {
        num 
10 *num *str  '0'  
        str++;
    }
    
    
return  num*flag;
}
函数原型: char *Myitoa(int value, char *string, int radix);
将任意数字value(正数或者负数)转化为字符串string。radix为转换字符串时的基数,不一定是十进制。
value是转化的数字,
string是字符串的地址。
radix则指的是数字由十进制转化成radix进制,再转为字符串。。
!!这里需要我们注意的是,由于此程序的字符索引表只能有36个值,所以仅限2-36进制之间的转换。。。

  C++ Code 
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

char  *Myitoa( int  num,  char  *str,  int  radix) //123 -->"123", -123 -->"-123".
{
    
char  index[]  "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" ;
    
int   0 ;
    
int   0 ;
    
    
if (num<</span>0)
    {
        num -num;
        str[i++] 
'-';
    }
    
do{
        str[i++] index[num%radix];
        num /= radix;
    }
while(num != 0);
    str[i] 
'\0';
    
if(str[0== '-')
    {
         
1;
    }
    i--;
    
    
for(int k; <= (i-k)/2j++,i--)
    {
        
char tmp str[i];
        str[i] str[j];
        str[j] tmp;
    }
    
    
return str;
}

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值