常用字符串处理函数总结

      我们学习过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  i =  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  i =  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  i =  0 ;
    
int  k =  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] == '-')
    {
         k = 
1;
    }
    i--;
    
    
for(int j = k; j <= (i-k)/2; j++,i--)
    {
        
char tmp = str[i];
        str[i] = str[j];
        str[j] = tmp;
    }
    
    
return str;
}

猜你喜欢

转载自blog.csdn.net/qq_19525389/article/details/79378794