ctype ライブラリ
isdigit、isalpha、toupper です。
「ctype ライブラリ」はCoddyKit上の無料C Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはC Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 C Academyコースには全4レッスンが含まれています。
ctype.h とは
<ctype.h> ヘッダーには、文字を分類および変換するための関数が用意されています。
ASCII の範囲を暗記したり、比較を手動で記述したりする必要がなくなります。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("Is 'A' alpha? %d\n", isalpha('A'));
return 0;
}isdigit
isdigit(c) は、c が数字文字 '0'~'9' の場合は 0 以外の値を返し、それ以外の場合は 0 を返します。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("isdigit('7') = %d\n", isdigit('7'));
printf("isdigit('x') = %d\n", isdigit('x'));
return 0;
}isalpha
isalpha(c) は、c が大文字または小文字のアルファベットの場合に 0 以外の値を返します。
数字と記号の場合は 0 を返します。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("isalpha('G') = %d\n", isalpha('G'));
printf("isalpha('3') = %d\n", isalpha('3'));
return 0;
}isalnum と isspace
isalnum(c) は、文字または数字の場合に真になります。isspace(c) は、スペース、タブ、改行などの空白文字の場合に真になります。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("isalnum('9') = %d\n", isalnum('9'));
printf("isspace(' ') = %d\n", isspace(' '));
printf("isspace('a') = %d\n", isspace('a'));
return 0;
}isupper と islower
isupper(c) は大文字かどうかを、islower(c) は小文字かどうかを判定します。
大文字・小文字を変換するかどうかを決める前に使うと便利です。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("isupper('A') = %d\n", isupper('A'));
printf("islower('A') = %d\n", islower('A'));
return 0;
}ispunct
ispunct(c) は、!、?、, のような、文字、数字、スペースではない印字可能な句読点文字に対して 0 以外の値を返します。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("ispunct('!') = %d\n", ispunct('!'));
printf("ispunct('a') = %d\n", ispunct('a'));
return 0;
}toupper
toupper(c) は、文字を大文字に変換した結果を返します。c が小文字でない場合は、変更せずに c を返します。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("%c\n", toupper('h'));
printf("%c\n", toupper('5'));
return 0;
}tolower
tolower(c) は、大文字を小文字に変換した結果を返します。大文字でない場合は、文字を変更せずに返します。
#include <stdio.h>
#include <ctype.h>
int main(void) {
printf("%c\n", tolower('H'));
printf("%c\n", tolower('z'));
return 0;
}文字列を分類する
文字列をループし、ctype 関数を使って数字と文字の個数を数えます。
#include <stdio.h>
#include <ctype.h>
int main(void) {
char *s = "abc123";
int letters = 0, digits = 0;
for (int i = 0; s[i]; i++) {
if (isalpha(s[i])) letters++;
if (isdigit(s[i])) digits++;
}
printf("letters=%d digits=%d\n", letters, digits);
return 0;
}文字列全体を大文字にする
toupper とループを組み合わせると、文字列全体を文字ごとに大文字へ変換できます。
#include <stdio.h>
#include <ctype.h>
int main(void) {
char s[] = "Hello";
for (int i = 0; s[i]; i++) {
s[i] = toupper(s[i]);
}
printf("%s\n", s);
return 0;
}負の char ではなく int を渡す
ctype 関数は、unsigned char で表現できる値、または EOF である必要がある int を受け取ります。
負の char を直接渡すと未定義動作になります。判断に迷う場合は、unsigned char にキャストしてください。
#include <stdio.h>
#include <ctype.h>
int main(void) {
char c = 'Q';
int result = isalpha((unsigned char)c);
printf("safe isalpha = %d\n", result);
return 0;
}確認問題
ctype ライブラリについての知識を確認しましょう。
まとめ
<ctype.h> ライブラリを使うと、次のことができます。
isdigit、isalpha、isalnum、isspace、ispunct、isupper、islowerで文字を分類する。toupperとtolowerで文字を変換する。- 未定義動作を避けるため、常に
unsigned charにキャストした値を渡す。
よくある質問
「ctype ライブラリ」レッスンは無料ですか?
はい。「ctype ライブラリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、C Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 C Academyコースには全4レッスンが含まれています。
「ctype ライブラリ」で何を学びますか?
isdigit、isalpha、toupper です。 ブラウザで直接実行するハンズオンコードでC Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
C Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのC Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「ctype ライブラリ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このC Academyレッスンでコードを書いて実行できますか?
はい。すべてのC Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 整数としての文字
- ctype ライブラリ
- 文字の読み取り
- 文字ユーティリティの作成