C语言基础之字符串

常用字符串函数使用及实现

strlen


  • 函数功能:求字符串长度函数,用于求C风格的字符串str的长度
  • 函数说明:区别于sizeof,strlen遇到第一个’\0’就结束,返回的字符串长度不包括’\0’
  • 函数原型:
#include <string.h>

size_t strlen(const char *s);
函数实现:
size_t my_strlen(char* s){
    size_t count = 0;
    while (*s != '\0'){
        count++;
        *s++;
    }
    return count;
}

strcpy


  • 函数功能:拷备字符串函数,将src所指向的字符串拷备到dest所指向的内存空间中
  • 函数说明:复制包含’\0’
  • 函数原型:
#include <string.h>

char *strcpy(char *dest, const char *src);

函数实现:
char* my_strcpy(char *dest, const char *src){
    char* ret = dest;
    assert(dest != NULL && src != NULL);
    while (*src){
        *ret++ = *src++;
    }
    return dest;
}

strcat


  • 函数功能:字符串追加函数,将src所指向的字符串追加到dest所指向的字符串的末尾
  • 函数说明:dest和src所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串
  • 函数原型:
    #include <string.h>
    
    char *strcat(char *dest, const char *src);

函数实现:
char* my_strcat(char *dest, const char *src)
{
    char* ret = dest;
    assert(dest != NULL && src != NULL);
    while (*ret )
    {
        *ret++;
    }//*ret='\0'
    while (*src )
    {
        *ret++ = *src++;
    }//*src='\0'
    *ret = '\0';
    return dest;
}



strncpy


  • 函数功能:拷备字符串函数,将src字符串的前n个字符拷备到dest所指向的内存空间中
  • 函数原型:
    char *strncpy(char *dest, const char *src, size_t n);

函数实现:
char* my_strncpy(char *dest, const char *src, size_t n)
{
    char* ret = dest;
    assert(dest != NULL && src != NULL);
    while (*src && n)
    {
        *ret++ = *src++;
        n--;
    }
    return dest;
}

strncat


  • 函数功能:字符串追加函数,将src所指向的字符串的前n个字符追加到dest所指向的字符串的末尾
  • 函数原型:
    char *strncat(char *dest, const char *src, size_t n);
    函数实现:
    char* my_strncat(char *dest, const char *src,int n)
    {
        char* ret = dest;
        assert(dest != NULL && src != NULL);
        while (*ret)
        {
            *ret++;
        }//*ret='\0'
        while (*src && n)
        {
            *ret++ = *src++;
            n--;
        }//*src='\0'
        *ret = '\0';
        return dest;
    }

    strcmp


    • 函数功能:字符串比较函数,用于比较str1和str2所指向的两个字符串的大小
    • 函数说明:若str1 > str2,返回值 > 0;若str1 = str2,返回值 = 0;
      若str1 < str2,返回值 < 0
    • 函数原型:
    #include <string.h>
    
    int strcmp(const char *str1,const char *str2);
    • 函数实现:
    int my_strcmp(const char* str1, const char* str2)
    {
        while (*str1 == *str2)
        {
            *str1++;
            *str2++;
        }//*str1!=*str2;
        return *str1 - *str2;
    }

    strchr


    • 函数功能:字符查找函数,查找c字符在s字符串中第一次出现的位置
    • 函数原型:
    #include <string.h>
    
    char* strchr(const char *s, char c);
    • 函数实现:
    char* my_strchr(const char *s, char c)
    {
        assert(s);
        while (*s++ || *s==c)
        {
            if (*s == c)
                return *s;
        }
        return NULL;
    }

    strstr


    • 函数功能:子串查找函数,查找子字符串str2在字符串str1中第一次出现的位置
    • 函数说明:若str2是str1的子串,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
    • 函数原型:
    #include <string.h>
    
    char* strstr(const char *haystack, const char *needle);
    • 函数实现:
    char* my_strstr(const char* dest, const char* src)
    {
        char* pos = dest;
        char* ret = src;
        char* tmp = pos;
        assert(dest != NULL && src != NULL);
        while (*tmp)
        {
            pos = tmp;
            ret = src;
            while (*pos == *ret)
            {
                *pos++;
                *ret++;
            }//*pos!=*ret
            if (*ret == '\0')
                return *tmp;
            tmp++;
        }
        return NULL;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值