字串

xiaoluosibky發表於2024-11-26

字串是計算機程式設計中表示文字資料的一種基本資料型別,在C語言中,字串是以字元陣列的形式實現的,並且每個字串都以空字元\0結尾,這個空字元標誌著字串的結束。

下面從基礎到深入講解字串的相關知識點:


1. 字串的定義與表示

  • 字串在C語言中使用字元陣列表示,例如:

    char str[10] = "hello"; // 包含'h', 'e', 'l', 'l', 'o', '\0'
    

    這裡的str可以容納10個字元,但只用了6個,包括了最後的空字元\0

  • 另一種寫法:

    char str[] = "world"; // 長度由編譯器自動計算
    

2. 輸入和輸出字串

  • 輸出字串:使用printf函式。

    printf("%s", str);
    
  • 輸入字串:使用scanfgets函式(注意安全問題)。

    char str[50];
    scanf("%s", str); // 注意:scanf無法讀取空格後的內容。
    

    推薦使用fgets讀取一整行,包括空格:

    fgets(str, 50, stdin); // 從輸入讀取最多49個字元,並新增'\0'
    

3. 常見的字串操作函式

這些函式都在<string.h>中定義,常用的有:

函式 功能
strlen(s) 計算字串的長度(不包括\0)。
strcpy(dest, src) 將字串src複製到dest中。
strcat(dest, src) 將字串src追加到dest的末尾。
strcmp(s1, s2) 比較兩個字串(返回0表示相等)。
strstr(s1, s2) 查詢字串s2s1中的第一次出現位置。

例子:

#include <stdio.h>
#include <string.h>

int main() {
    char s1[20] = "Hello";
    char s2[] = "World";

    // 字串拼接
    strcat(s1, s2);
    printf("拼接後: %s\n", s1); // 輸出: HelloWorld

    // 計算長度
    printf("長度: %lu\n", strlen(s1)); // 輸出: 10

    // 字串比較
    if (strcmp(s1, s2) == 0) {
        printf("字串相等\n");
    } else {
        printf("字串不相等\n");
    }

    return 0;
}

4. 字串的常見操作

1)反轉字串

#include <stdio.h>
#include <string.h>

void reverse(char str[]) {
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - 1 - i];
        str[len - 1 - i] = temp;
    }
}

int main() {
    char str[] = "hello";
    reverse(str);
    printf("反轉後的字串: %s\n", str); // 輸出: olleh
    return 0;
}

2)查詢字元

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "hello";
    char *pos = strchr(str, 'l'); // 查詢'l'的第一次出現
    if (pos) {
        printf("字元'l'第一次出現的位置: %ld\n", pos - str);
    }
    return 0;
}

3)分割字串

使用strtok函式:

#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "C,is,a,programming,language";
    char *token = strtok(str, ",");
    while (token) {
        printf("%s\n", token);
        token = strtok(NULL, ",");
    }
    return 0;
}

輸出:

C
is
a
programming
language

5. 注意事項

  1. 記憶體越界:定義字串時,必須留出足夠的空間儲存字元和\0

    char str[5] = "hello"; // 錯誤:無法儲存最後的'\0'
    
  2. 安全輸入:避免gets,推薦fgets以防止緩衝區溢位。

  3. 動態分配記憶體:如果字串長度不確定,可以使用動態記憶體分配。

    char *str = (char *)malloc(50 * sizeof(char));
    strcpy(str, "dynamic");
    printf("%s\n", str);
    free(str);
    

6. 小練習

試著實現以下功能:

  1. 手動實現strlen函式。
  2. 手動實現字串拼接(類似strcat)。
  3. 判斷一個字串是否是迴文。

如果需要更詳細的講解或程式碼實現,歡迎繼續提問! 😊

相關文章