C语言字符串操作函数

C语言中(部分)字符串操作函数简介

strlen(p);         // 计算指定的字符串p的长度,不包括结束字符'\0'
strcpy(p, p1);     // 复制字符串 
strncpy(p, p1, n); // 复制指定长度字符串 
strcat(p, p1);     // 附加字符串 
strncat(p, p1, n); // 将n个字符追加到字符串的结尾 
strcmp(p, p1);     // 根据ASCII码比较字符串 
strncmp(p, p1, n); // 比较指定长度字符串 
stricmp(p, p1);    // 不区分大小写进行字符串比较
strstr(p, p1);     // 检索子串在字符串中首次出现的位置
strchr(p, c);      // 在一个字符串中查找给定字符的首次匹配之处
strrchr(p, c);     // 在字符串中反向查找 
strpbrk(p, p1);    // 返回两个字符串中首个相同字符的位置 
strspn(p, p1);     // 用来计算字符串p中连续有几个字符都属于字符串p1
strcspn(p, p1);    // 以目标字符串的所有字符作为集合,在当前字符串查找属于该集合的任一元素的偏移
strtok(p,p1);      // 根据分界符p1将字符串分p割成一个个片段 

 


部分字符串操作函数的C语言模拟实现

1.strlen

函数声明:

size_t mystrlen(const char *s);

函数实现:

(1)利用计数器:

size_t mystrlen(const char* str)
{
      size_t count = 0;
      while (*str != '\0')
      {
            count++;
            str++;
      }
      return count;
}

(2)利用递归:

size_t mystrlen(const char *str)
{
    if (*str == '\0')    // 递归结束条件
        return 0;
    else
        return my_strlen(str + 1) + 1;
}

(3)利用指针:

size_t mystrlen(const char* str)
{
      const char* end = str;
      while (*end++)
            ;
      return end - str - 1;
}

2.strcpy

函数声明:

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

函数实现:

char *mystrcpy(char *dest, const char *src)
{
    char *res = dest;
    assert(dest);    // 包含在头文件<assert.h>里
    assert(src);
    while (*dest++ = *src++){} //注意这里是一个等号

    return res;
}

3.strncpy

函数声明:

char* mystrncpy(char* dest, const char* src, size_t len)

函数实现:

char* mystrncpy(char* dest, const char* src, size_t len){
    char* res = dest;
    assert(dest);
    assert(src);

    while(len && (*dest++ = *src++) != '\0')
        --len;

    if(len)
        while(--len)
            *dest++ = '\0';

    return res;
}

4.strcat

函数声明:

char *mystrcat(char *dest, const char *src)

函数实现:

char *mystrcat( char *dest, const char *src ){
      char *res = dest;
      assert( dest );
      assert( src );
      while ( *dest != '\0' )
            ++dest;
      while ( *dest++ = *src++ ){} //这里同样也是一个等号

      return res;
}

5.strncat

函数声明:

char* mystrncat(char* dest, const char* src, size_t len)

函数实现:

char* mystrncat( char* dest, const char* src, size_t len ){
    char* res = dest;
    assert( dest );
    assert( src );
    while ( *dest != '\0' )
        ++dest;
    while ( len-- )
        *dest++ = *src++;

    return res;
}

6.strcmp

函数声明:

int mystrcmp(const char* src1, const char* src2)

函数实现:

int mystrcmp(const char* src1, const char* src2){
    assert(src1);
    assert(src2);

    while ( (*src1) == (*src2) ){
        if (*src1 == '\0')
            return 0;     // 若src1与src2相同,则返回0
        ++src1; 
        ++src2; 
    } 
    
    if( (*src1) > (*src2) )
        return 1;
    else
        return -1;     
} 

7.strncmp

函数声明:

int mystrncmp(const char* src1, const char* src2, size_t len)

函数实现:

int my_strncmp(const char* s1, const char* s2, size_t len)
{
    assert(src1);
    assert(src2);

    while (len--){
        if (*src1 == *src2){
            ++src1;
            ++src2;
        }
        else{
            if (*src1 > *src2)
                return 1;
            else
                return -1;
        }
    }
    return 0;
}

8.strstr

函数功能:在s1中查找子串s2第1次出现的起始位置,并返回一个指向该位置的指针。如果s2并没有出现在s1的任何地方,函数将返回一个NULL指针。如果第二个函数是一个空字符串,函数就返回s1。

函数声明:

char* mystrstr(char* s1, const char* s2)

函数实现:

char* mystrstr(char* s1, const char* s2){
    char* p = s1;
    const char* q = s2;
    char* cur = NULL;

    assert( s1 );
    assert( s2 );

    if ( *s2 == '\0' )
        return s1;    // 子串为空串,返回s1

    while ( *p != '\0' ){
        cur = p;
        while ( ( *p != '\0' ) && ( *q != '\0' ) && ( *p == *q ) ){
            ++p;
            ++q;
        }
        if ( *q == '\0' )
            return cur;
        p = cur + 1;
        q = s2;
    }
    return NULL;
}

9.strchr

函数功能:查找一个特定的字符,在字符串str中查找字符ch第一次出现的位置,找到后函数返回一个指向该位置的指针。如果该字符并不存在于字符串中,函数就返回一个NULL指针。

函数声明:

char* mystrchr(const char* str, char ch)

函数实现:

char* mystrchr( const char* str, char ch ){
    const char* tmp = str;
    while ( *tmp ){
        if ( *tmp == ch )
            return tmp;
        ++tmp;
    }
    return NULL;
}

10.strrchr

函数功能:查找指定字符ch最后一次出现在str中的位置。

函数声明:

char* mystrrchr(const char* str, int ch)

函数实现:

char* mystrrchr(const char* str, int ch){
    char* pos = 0;
    assert( str );

    while ( *str ){
        if ( *str == ch )
            pos = str;
        ++str;
    }

    if (pos != 0)
        return pos;
    else
        return NULL;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值