常用字符串函数

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 文件中,也可以用来清零字符串。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值