1. 程式人生 > >C語言字串操作函式

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;
}