天天看點

8個C語言字元串操作相關函數代碼,告訴你如何玩轉字元串

作者:曉亮Albert

當涉及到字元串操作的具體代碼實作時,一些常用的字元串處理函數的内部實作可能會有所不同。以下是8個常見的C語言字元串操作函數的樣例代碼和簡要講解:

  1. 字元串長度計算(strlen):
size_t strlen(const char *str) {
    const char *ptr = str;
    while (*ptr != '\0') {
        ptr++;
    }
    return ptr - str;
}
           

講解:這個樣例展示了計算字元串長度的函數實作。通過周遊字元串中的每個字元,直到遇到字元串結束符(\0),進而确定字元串的長度。

  1. 字元串複制(strcpy):
char *strcpy(char *dest, const char *src) {
    char *ptr = dest;
    while (*src != '\0') {
        *ptr++ = *src++;
    }
    *ptr = '\0';
    return dest;
}
           

講解:這個樣例展示了字元串複制的函數實作。通過逐個複制源字元串中的字元到目标字元串中,直到遇到字元串結束符(\0),并在目标字元串的末尾添加字元串結束符。

  1. 字元串連接配接(strcat):
char *strcat(char *dest, const char *src) {
    char *ptr = dest;
    while (*ptr != '\0') {
        ptr++;
    }
    while (*src != '\0') {
        *ptr++ = *src++;
    }
    *ptr = '\0';
    return dest;
}
           

講解:這個樣例展示了字元串連接配接的函數實作。通過定位到目标字元串的末尾,然後逐個複制源字元串中的字元到目标字元串的末尾,直到遇到字元串結束符(\0),并在目标字元串的末尾添加字元串結束符。

  1. 字元串比較(strcmp):
int strcmp(const char *str1, const char *str2) {
    while (*str1 == *str2) {
        if (*str1 == '\0') {
            return 0;
        }
        str1++;
        str2++;
    }
    return *str1 - *str2;
}
           

講解:這個樣例展示了字元串比較的函數實作。通過逐個比較兩個字元串中對應位置的字元,直到找到不同字元或其中一個字元串結束,然後傳回它們之間的內插補點。

  1. 字元串查找(strstr):
char *strstr(const char *str, const char *substr) {
    size_t substr_length = strlen(substr);
    if (substr_length == 0) {
        return (char *)str;
    }
    while (*str != '\0') {
        if (strncmp(str, substr, substr_length) == 0) {
            return (char *)str;
        }
        str++;
    }
    return NULL;
}
           

講解:這個樣例展示了字元串查找的函數實作。通過逐個比較源字元串中與子串長度相同的子串,直到找到比對的子串或源字元串結束。

  1. 字元串分割(strtok):
char *strtok(char *str, const char *delim) {
    static char *ptr = NULL;
    if (str != NULL) {
        ptr = str;
    }
    if (ptr == NULL) {
        return NULL;
    }
    char *token = ptr;
    while (*ptr != '\0') {
        if (strchr(delim, *ptr) != NULL) {
            *ptr = '\0';
            ptr++;
            break;
        }
        ptr++;
    }
    if (*ptr == '\0') {
        ptr = NULL;
    }
    return token;
}
           

講解:這個樣例展示了字元串分割的函數實作。通過在源字元串中查找分隔符字元,将比對的子串截斷并傳回,同時記錄下一個子串的起始位置。

  1. 字元串反轉:
void reverse_string(char *str) {
    int left = 0;
    int right = strlen(str) - 1;
    while (left < right) {
        char temp = str[left];
        str[left] = str[right];
        str[right] = temp;
        left++;
        right--;
    }
}
           

講解:這個樣例展示了字元串反轉的函數實作。通過交換字元串中對應位置的字元,從字元串的兩端向中間移動,直到兩個指針相遇。

  1. 字元串轉換為整數(atoi):
int atoi(const char *str) {
    int sign = 1;
    int num = 0;
    while (isspace(*str)) {
        str++;
    }
    if (*str == '+' || *str == '-') {
        if (*str == '-') {
            sign = -1;
        }
        str++;
    }
    while (isdigit(*str)) {
        num = num * 10 + (*str - '0');
        str++;
    }
    return sign * num;
}
           

講解:這個樣例展示了将字元串轉換為整數的函數實作。通過跳過字元串中的空白字元,檢查正負号,并逐個将數字字元轉換為對應的整數值,并根據正負号最終傳回結果。

這些樣例展示了常見的C語言字元串操作函數的實作方式。需要注意的是,這些實作方式可能略有不同,具體取決于編譯器和标準庫的實作。然而,這些樣例代碼提供了對于每個字元串操作函數的基本思路和算法,幫助了解它們的功能和使用方法。

繼續閱讀