C語言 strcmp 函數:字串比較全攻略

在C語言中比較字串時,你會使用什麼呢?strcmp 是一個用來確認兩個字串是否相同的函數,就像是程式在問「這兩個字串一樣嗎?」。當然,程式無法判斷貓和狗哪個比較可愛,但至少能看出「HELLO」和「hello」的區別。在本文中,我們將講解 `strcmp` 的機制、使用方法以及容易出錯的地方。

1. 什麼是 strcmp 函數?

strcmp 函數會逐字元比較兩個字串,並回傳一個整數值作為結果。此函數的行為如下:

  • 0: 字串相符時
  • 正的值: 第一個字串在字典順序中較後面時
  • 負的值: 第一個字串在字典順序中較前面時

此函數不僅能確認字串是否完全相同,也能判斷哪個字串在字典順序中較前面。在程式中,可以像下面這樣簡單使用:

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

int main() {
    char str1[] = "Hello";
    char str2[] = "World";

    int result = strcmp(str1, str2);
    printf("strcmp 的結果: %dn", result);
    return 0;
}

上述程式碼比較了 “Hello” 和 “World”,並顯示結果。重要的一點是,strcmp 會**區分大小寫**,因此 “HELLO” 和 “hello” 將被視為不同的字串。

2. strcmp 函數的運作原理

strcmp 的運作既簡單又強大。它會從第一個字元開始逐一比較兩個字串,並在發現不同字元時回傳它們之間的差值。這個機制也應用於字母順序的比較,例如比較 “apple” 和 “banana” 時,`strcmp` 會先比較 “a” 和 “b”,並回傳一個負值。

以下是進一步理解 `strcmp` 機制的程式範例:

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

int main() {
    char str1[] = "apple";
    char str2[] = "banana";

    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("字串相符。n");
    } else if (result < 0) {
        printf("str1 在 str2 之前。n");
    } else {
        printf("str1 在 str2 之後。n");
    }

    return 0;
}

這段程式碼比較了 “apple” 和 “banana”。結果顯示,strcmp 告訴我們 “apple” 在字典順序中位於 “banana” 之前。這使得在對字串進行字典順序排序時非常方便。

3. strcmp 函數的使用範例

1. 確認使用者輸入

strcmp 在比較使用者輸入的資料與現有資料時非常有用。例如,可用於確認密碼是否一致。

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

int main() {
    char password[] = "secret";
    char input[256];

    printf("請輸入密碼: ");
    scanf("%s", input);

    if (strcmp(password, input) == 0) {
        printf("密碼相符。n");
    } else {
        printf("密碼錯誤。n");
    }

    return 0;
}

這個程式使用 strcmp 比較輸入的密碼與正確的密碼。

2. 依字典順序排序

在依字典順序排列字串時,strcmp 也非常方便。在排序多個單字時,可以使用 strcmp 來判斷哪個單字應該排在前面。

4. strcmp 函數的替代方案

strcmp 雖然非常方便,但也應根據用途考慮使用其他函數。

strncmp: 比較部分字串

strncmp 用於只比較字串的一部分。例如,用於比較字串的前3個字元。

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

int main() {
    char str1[] = "apple";
    char str2[] = "apricot";

    if (strncmp(str1, str2, 3) == 0) {
        printf("前3個字元相符。n");
    } else {
        printf("前3個字元不相符。n");
    }

    return 0;
}

memcmp: 比較記憶體

memcmp 是一個用於比較整個記憶體區塊而非字串的函數。在需要比較二進位資料時非常有用。

5. 常見錯誤

1. 未考慮大小寫差異

strcmp 會區分大小寫。例如,”HELLO” 和 “hello” 將被視為不同的字串。如果需要進行不區分大小寫的比較,請考慮使用 strcasecmp

2. 比較 NULL 指標

使用 strcmp 比較 NULL 指標會導致程式崩潰。確認比較的字串已正確初始化非常重要。

總結

strcmp 在C語言中是一個非常重要的函數,可以輕鬆進行字串比較。我們透過密碼確認、字串排序等實際程式使用範例進行了說明。在程式中的字串操作中,請務必體驗這個函數的便利性。

侍エンジニア塾