在 C 語言中轉換字串為小寫

Jinku Hu 2023年1月30日 2021年2月7日
  1. C 語言中使用 tolower 函式將字串轉換為小寫
  2. C 語言中使用自定義函式將字串轉換為小寫字母
在 C 語言中轉換字串為小寫

本文將演示如何在 C 語言中把字串轉換為小寫的多種方法。

C 語言中使用 tolower 函式將字串轉換為小寫

tolower 函式是 C 標準庫的一部分,定義在 <ctype.h> 標頭檔案中。tolower 接受一個 int 型別引數,如果存在相應的小寫表示,則返回給定字元的轉換值。注意,傳遞的字元需要是 EOF 或 unsigned char 型別可表示的。在這種情況下,我們用一個字串字面值初始化 char 指標,然後迭代每個字元,將其轉換為小寫值。不過要注意的是,傳遞給 tolower 函式的 char 型別引數必須被轉換為 unsigned char

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

int main(){
    char *str = "THIS STRING LITERAL IS ARBITRARY";

    printf("%s\n", str);
    for (size_t i = 0; i < strlen(str); ++i) {
        printf("%c", tolower((unsigned char) str[i]));
    }
    printf("\n");

    exit(EXIT_SUCCESS);
}

輸出:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

前面的例子程式碼用轉換後的小寫字元覆蓋了原始字串的內容。或者,我們可以使用 calloc 分配另一個 char 指標,它與 malloc 類似,只是它將分配的記憶體清零,並單獨儲存轉換後的字串。注意,指標應該在程式退出前釋放,如果程序是長期執行的,則應該在不需要字串變數時立即釋放。

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

int main(){
    char *str = "THIS STRING LITERAL IS ARBITRARY";

    printf("%s\n", str);

    size_t len = strlen(str);
    char *lower = calloc(len+1, sizeof(char));

    for (size_t i = 0; i < len; ++i) {
        lower[i] = tolower((unsigned char)str[i]);
    }
    printf("%s", lower);
    free(lower);

    exit(EXIT_SUCCESS);
}

輸出:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary

C 語言中使用自定義函式將字串轉換為小寫字母

一個更靈活的解決方案是實現一個自定義函式,將字串變數作為引數,並在一個單獨的記憶體位置返回轉換後的小寫字串。這種方法本質上是將前面的例子與 main 函式解耦。在本例中,我們建立了一個函式 toLower,它接收 char*,其中儲存了一個空端字串和一個表示字串長度的 size_t 型別的整數。該函式使用 calloc 函式分配堆上的記憶體;因此,呼叫者負責在程式退出前重新分配記憶體。

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

char *toLower(char *str, size_t len)
{
    char *str_l = calloc(len+1, sizeof(char));

    for (size_t i = 0; i < len; ++i) {
        str_l[i] = tolower((unsigned char)str[i]);
    }
    return str_l;
}

int main(){
    char *str = "THIS STRING LITERAL IS ARBITRARY";

    printf("%s\n", str);
    size_t len = strlen(str);

    char *lower = toLower(str, len);
    printf("%s", lower);
    free(lower);

    exit(EXIT_SUCCESS);
}

輸出:

THIS STRING LITERAL IS ARBITRARY
this string literal is arbitrary
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相關文章 - C String