strchr和strrchr函數及用法,C語言strchr和strrchr函數詳解

2020-07-16 10:04:25
如果需要對字串中的單個字元進行查詢,那麼應該使用 strchr 或 strrchr 函數

其中,strchr 函數原型的一般格式如下:

char *strchr(const char *s, int c);

它表示在字串 s 中查詢字元 c,返回字元 c 第一次在字串 s 中出現的位置,如果未找到字元 c,則返回 NULL。也就是說,strchr 函數在字串 s 中從前到後(或者稱為從左到右)查詢字元 c,找到字元 c 第一次出現的位置就返回,返回值指向這個位置,如果找不到字元 c 就返回 NULL。

相對於 strchr 函數,strrchr 函數原型的一般格式如下:

char *strrchr(const char *s, int c);

與 strchr 函數一樣,它同樣表示在字串 s 中查詢字元 c,返回字元 c 第一次在字串 s 中出現的位置,如果未找到字元 c,則返回 NULL。但兩者唯一不同的是,strrchr 函數在字串 s 中是從後到前(或者稱為從右向左)查詢字元 c,找到字元 c 第一次出現的位置就返回,返回值指向這個位置。下面的範例程式碼演示了兩者之間的區別:
int main(void)
{
    char str[] = "I welcome any ideas from readers, of course.";
    char *lc = strchr(str, 'o');
    printf("strchr: %sn", lc);
    char *rc = strrchr(str, 'o');
    printf("strrchr: %sn", rc);
    return 0;
}
對於上面的範例程式碼,strchr 函數是按照從前到後的順序進行查詢,所以得到的結果為“ome any ideas from readers,of course.”; 而 strrchr 函數則相反,它按照從後到前的順序進行查詢,所以得到的結果為“ourse.”。

範例程式碼執行結果為:
strchr: ome any ideas from readers, of course.
strrchr: ourse.

最後還需要注意的是,為什麼函數的“c”引數是 int 型別,而不是“char”型別呢?

其實原因很簡單,這裡用的是字元的 ASCII 碼(因為每個字元都對應著一個 ASCII 碼),這樣在傳值的時候既可以傳“char”型別的值,又可以傳“int”型別的值(0~127)。