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

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

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

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

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

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.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 <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.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 <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C String