文字列の大文字・小文字の変換
呼称: 文字列の大文字・小文字の変換
目的: 文字列を全て大文字、又は小文字へ変換する
特徴: 引数として与えた文字列を直接、書き換える
用例: 文字列の比較演算の前処理や出力のフォーマット整形等
備考: 状況に応じて void 型と char* 型を使い分ける
設定ファイルのキーの比較を行う際、全て小文字に変換して比較しようと考えました。C 言語の標準ライブラリには、文字の変換関数はあるけれど、文字列は用意されていないので自分で作る必要があります。みんなどうやって実装しているのかな?と調べてみると、見事に実装はバラバラでした(- -#
私が調べた限りでは、以下の2通りの実装がコード量も少なくて良いかなと思います。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> void str2lower(char *s) { while(*s) { *s = (char)tolower((int)*s); s++; } } void str2upper(char *s) { while(*s) { *s = (char)toupper((int)*s); s++; } } char *str2lower2(char *s) { char *p; for(p=s; *p; p++) { *p = (char)tolower((int)*p); } return s; } char *str2upper2(char *s) { char *p; for(p=s; *p; p++) { *p = (char)toupper((int)*p); } return s; } int main (void) { char s1[] = "capitalize"; char *s2 = "UNCAPITALIZE"; char *buf1, *buf2; buf1 = strdup(s1); buf2 = strdup(s2); printf("### void function\n"); str2upper(buf1); str2lower(buf2); printf("%s\n", buf1); printf("%s\n", buf2); printf("### char* function\n"); printf("%s\n", str2upper2(buf1)); printf("%s\n", str2lower2(buf2)); free(buf1); free(buf2); return EXIT_SUCCESS; }
実行結果。
### void function CAPITALIZE uncapitalize ### char* function CAPITALIZE uncapitalize
リファレンス:
C言語 文字判定 大文字 小文字変換