字符串处理函数

  • 字符串长度
    库函数strlen的原型如下:
    size_t strlen(char const *string);
#include<stddef.h>
size_t strlen(char const *string)
{
    int length;
    while(*string++)
        length++;
    return length;
}
  • 字符串复制
    库函数strcpy的原型如下:
    char *strcpy(char *dst, char const *src);

    库函数strncpy的原型如下:
    char *strncpy(char *dst, char const *src, size_t len);

//警告:
//1.函数不对参数是否为NULL做检查。
//2.请确保目标数组长度足够。
//3.src、dst在内存中出现重叠,结果未定义。
char *strcpy(char *dst, char const *src)
{
    char *p = dst;
    while(*dst++ = *src++)
        ;
    return p;
}
//警告:
//1.函数不对参数是否为NULL做检查。
//2.参数len不要传递负数。
//3.请确保目标数组长度足够。
//4.src、dst在内存中出现重叠,结果未定义。
char *strncpy(char *dst, char const *src, size_t len)
{
    char *p = dst;
    while(*src && n-- > 0)
        *dst++ = *src++;
    while(len-- != 0)
        *s++ = '\0';
    return p;
}
  • 字符串连接
    库函数strcat的原型如下:
    char *strcat(char *dst, char const *src);

    库函数strncat的原型如下:
    char *strncat(char *dst, char const *src, size_t len);

//警告:
//1.函数不对参数是否为NULL做检查。
//2.请确保目标数组长度足够。
//3.src、dst在内存中出现重叠,结果未定义。
char *strcat(char *dst, char const *src)
{
    char *p = dst;
    while(*dst)
        dst++;
    while(*dst++ = *src++)
        ;
    return p;
}
//警告:
//1.函数不对参数是否为NULL做检查。
//2.参数len不要传负数。
//3.请确保目标数组长度足够。
//4.src、dst在内存中出现重叠,结果未定义。
char *strncat(char *dst, char const *src, size_t len)
{
    char *p = dst;
    while(*dst)
        dst++;
    while(*src && n-- > 0)
        *dst++ = *src++;
    *s = '\0';
    return p;
}
  • 字符串比较
    库函数strcmp原型如下:
    int strcmp(char const *s1, char const *s2);

    库函数strncmp原型如下:
    int strncmp(char const *s1, char const *s2, size_t len);

//警告:
//1.函数不对参数是否为NULL做检查。
int strcmp(char const *s1, char const *s2)
{
    for(; *s1 == *s2; s1++, s2++)
    {
        if(*s1 == '\0')
            return 0;
    }
    return *s1 - *s2;
}
//警告:
//1.函数不对参数是否为NULL做检查。
//2.参数len不要传负数。
 int strncmp(char const *s1, char const *s2, size_t len)
 {
    for(; *s1 == *s2; s1++, s2++)
    {
        if(*s1 == '\0' || --n == 0)
            return 0;
    }
    return *s1 - *s2;
 }
  • 查找一个字符
    库函数strchr原型如下:
    char *strchr(char const *str, int ch);
//警告:
//1.函数不对参数是否为NULL做检查。
char *strchr(char const *str, int ch)
{
    for(; *str != '\0'; str++)
    {
        if(*str == ch)
            return str;
    }
    return NULL;
}
  • 查找任何几个字符串
    库函数strpbrk原型如下:
    char *strpbrk(char const *str, char const *grop);
 //警告:
//1.函数不对参数是否为NULL做检查。
 char *strpbrk(char const *str, char const *grop)
 {
    char const *p = NULL;
    for(; *str != '\0'; str++)
    {
        for(p = grop; *p != '\0'; p++)
        {
            if(*p == *str)
                return str;
        }
    }
    return NULL;
 }
  • 查找一个子串
    库函数strstr原型:
    char *strstr(char const *s1, char const *s2);
//警告:
//1.函数不对参数是否为NULL做检查。
 char *strstr(char const *s1, char const *s2)
 {
     char const *p1, *p2;
     for(p1 = s1; *s1 != '\0'; s++)
     {
         for(p1 = s1, p2 = s2; *p2 != '\0' && *p1 == *p2; p1++, p2++)
             ;
         if(*p2 == '\0' && p2 > s2)
             return s1;
     }
     return NULL;
 }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值