常用字符串函数

来源:互联网 发布:e店宝官方下载3.0 mac 编辑:程序博客网 时间:2024/06/05 11:39

1、字符串比较函数-strcmp、strncmp

  1. strncmp
    函数原型:
    extern int strcmp(const char *s1,const char *s2);
    头文件:
#include <string.h>

功能:比较字符串s1和s2。一般形式:strcmp(字符串1,字符串2)
在linux下
当s1

int my_strcmp(char *s1,char *s2){    while( *s1 != '\0' || *s2 != '\0')    {        if(*a == *b)        {             s1++;             s2++;             continue;        }        else if( *a > *b)        {            return 1;        }        else        {            return -1;        }    }    return 0;}

2.strncmp()
函数原型:
int strncmp (const char *s1, const char *s2, size_t size)
头文件:

#include <string.h>

【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志’\0’,若差值不为0,则将差值返回。例如字符串”Ac”和”ba”比较则会返回字符”A”(65)和’b’(98)的差值(-33)。
【注意】:要比较的字符包括字符串结束标志’\0’,而且一旦遇’\0’就结束比较,无论n是多少,不再继续比较后边的字符。
【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回1;若s1 若小于s2,则返回-1。

int strncmp ( char * s1, char * s2, size_t n){      if ( !n )      {          return 0;      }      while ((n --) > 0 && (*s1 != '\0' || *s2 != '\0'))      {        if(*a == *b)        {             s1++;             s2++;             continue;        }        else if( *a > *b)        {            return 1;        }        else        {            return -1;        }    }    return 0;}

2、字符串拷贝函数-strcpy、strncpy
(1)strcpy()
原型声明:char * strcpy(char* dest, const char *src);
头文件:#include <string.h> 和 #include <stdio.h>
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。返回指向dest的指针。

char *my_strcpy(char *dest,char *src){     char *temp = dest;    while(*str != '\0')    {        *temp = *str;        str++;        temp++;    }    *temp = '\0';    return dest;}

(2)strncpy
函数原型:char *strncpy(char *dest,char *src,size_t)
表头文件 :#include <string.h>
函数说明:
strncpy()会将参数 src 字符串拷贝前 n 个字符至参数 dest 所指的
地址。
返回参数 dest 的字符串起始地址。
代码实现:

char * my_strncpy(char *dest,char *str,int n){    int i;    if(strlen(str) < n)    {        return NULL;    }    for(i = 0; i < n; i++)    {        *(dest + i) = *(str + i);    }    *(dest + i) = '\0';    return dest;}

3、字符串长度函数-strlen
头文件:#include <stdio.h>
函数原型:unsigned int strlen (char *s);

【参数说明】s为指定的字符串。

strlen()用来计算指定的字符串s 的长度,不包括结束字符”\0”。

【返回值】返回字符串s 的字符数。
【注意点】例题讲解

c语言实现

int my_strlen(char *s){    int count = 0;    while(*s != '\0')    {         s++;         count++;    }    return count;}

4、字符串连接函数-strcat、strncat
(1)stract()
【函数原型】char *strcat(char *dest, const char *src);

【参数】dest 为目的字符串指针,src 为源字符串指针。

strcat() 会将参数 src 字符串复制到参数 dest 所指的字符串尾部;dest 最后的结束字符 NULL 会被覆盖掉,并在连接后的字符串的尾部再增加一个 NULL。

注意:dest 与 src 所指的内存空间不能重叠,且 dest 要有足够的空间来容纳要复制的字符串。

【返回值】返回dest 字符串起始地址。
函数实现:

char *my_strcat(char *dest,char *src){    char *temp = dest;    while(*temp != '\0')    {        temp++;    }    while(*src != '\0')    {        *temp = *src;        temp++;        src++;    }    *temp = '\0';    return dest;}

(2)strncat()
【函数原型】char * strncat(char *dest, const char *src, size_t n);

【参数说明】dest为目标字符串,src为源字符串,n为要追加的字符的数目。

strncat()将会从字符串src的开头拷贝n 个字符到dest字符串尾部,dest要有足够的空间来容纳要拷贝的字符串。如果n大于字符串src的长度,那么仅将src全部追加到dest的尾部。

strncat()会将dest字符串最后的’\0’覆盖掉,字符追加完成后,再追加’\0’。

【返回值】返回字符串dest。

c语言实现过程:

char *my_strcat(char *dest,char *srcint n){    char *temp = dest;    while(*temp != '\0')    {        temp++;    }    while(*src != '\0'&& n--)    {        *temp = *src;        temp++;        src++;    }    *temp = '\0';    return dest;}

5、字符串清空函数-memset、bzero
(1)memset
【头文件】:#include <string.h>
函数原型】
void * memset( void * ptr, int value, size_t num );
【参数说明】:
ptr 为要操作的内存的指针。
value 为要设置的值。你既可以向 value 传递 int 类型的值,也可以传 递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换。
num 为 ptr 的前 num 个字节,size_t 就是unsigned int。
【函数说明】memset() 会将 ptr 所指的内存区域的前 num 个字节的值都设置为 value,然后返回指向 ptr 的指针。
memset() 可以将一段内存空间全部设置为特定的值,所以经常用来初始化字符数组。例如:
char str[20];
memset(str, ‘\0’, sizeof(str)-1);
【返回值】返回指向 ptr 的指针。
注意:参数 value 虽声明为 int,但必须是 unsigned char,所以范围在0 到255 之间。
(2)bzero
【头文件】:#include <string.h>

bzero() 会将内存块(字符串)的前n个字节清零,其原型为:
void bzero(void *s, int n);

【参数】s为内存(字符串)指针,n 为需要清零的字节数。

bzero()会将参数s 所指的内存区域前n 个字节,全部设为零值。

实际上,bzero(void * s, int n) 等价于 memset((void*)s, 0,size_tn),用来将内存块的前 n 个字节清零,但是 s 参数为指针,又很奇怪的位于 string.h 文件中,也可以用来清零字符串。

0 0
原创粉丝点击