C 言語で文字列を小文字に変換

胡金庫 2023年10月12日
  1. 文字列を C 言語で小文字に変換するには tolower 関数を使用する
  2. C 言語でカスタム関数を使用して文字列を小文字に変換する
C 言語で文字列を小文字に変換

この記事では、C 言語で文字列を小文字に変換する方法について複数の方法を紹介します。

文字列を C 言語で小文字に変換するには tolower 関数を使用する

関数 tolower<ctype.h> ヘッダファイルで定義されている C 標準ライブラリの一部です。tolowerint 型の引数を 1つ取り、対応する小文字表現が存在する場合にはその文字の変換後の値を返します。渡された文字は EOF か unsigned char 型の表現が可能なものでなければならないことに注意してください。この場合、char ポインタを文字列リテラル値で初期化し、各文字を反復処理して小文字に変換します。ただし、char 型の引数を tolower 関数に渡す場合は 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 関数からデカップリングしたものです。この例では、ヌル文字で終端する文字列が格納されている char* と文字列の長さを表す size_t 型の整数を引数にとる関数 toLower を作成しました。この関数は、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
著者: 胡金庫
胡金庫 avatar 胡金庫 avatar

DelftStack.comの創設者です。Jinku はロボティクスと自動車産業で8年以上働いています。自動テスト、リモートサーバーからのデータ収集、耐久テストからのレポート作成が必要となったとき、彼はコーディングスキルを磨きました。彼は電気/電子工学のバックグラウンドを持っていますが、組み込みエレクトロニクス、組み込みプログラミング、フロントエンド/バックエンドプログラミングへの関心を広げています。

LinkedIn Facebook

関連記事 - C String