文字検査・変換関数
Cの標準関数として、文字検査・変換関数がたくさん用意されています。
関数 | 仕様 | 使用例 |
---|---|---|
isalmun |
int isalmun(c); |
|
isalpha |
int isalpha(c); |
|
isascii | int isascii(c); int c; cがアスキー文字(0x00 -- 0x7f)なら真 |
int c; if(isascii(c)) {printf("アスキー文字");} |
iscntrl | int iscntrl(c); int c; cがコントロールコード(制御文字)(0x00--0x1f, 0x7f)なら真を返す |
|
isdigit | int isdigit(c); int c; cが10進数値文字'0'--'9'なら真を返す。 使用例はisdigitの使用例を参照 |
|
islower | int islower(c); int c; cが英小文字'a'--'z'なら真を返す 使用例は下にあります。 |
|
isprint | int isprint(c); int c; cが表示可能文字(0x20--0x7e)なら真を返す |
|
ispunct | int ispunct(c); int c; cが句読点文字なら真を返す |
|
isspace | int isspace(c); int c; cが空白文字(0x09--0x0d, 0x20)なら真を返す |
|
isupper | int isupper(c); int c; cが英大文字('A'--'Z')なら真を返す。 |
|
isxdigit | int isxdigit(c); int c; cが16進数値文字(0-9, 'a'-'f', 'A'-'F')なら真を返す。 |
|
toascii | int toascii(c); int c; cをascii文字に変換する |
|
tolower | int tolower(c); int c; cを英大文字であれば小文字に変換する |
int c; c=getchar(); putchar(tolower(c)); |
toupper | int toupper(c); int c; cが英小文字であれば、大文字に変換する |
*ちなみに、LSIC86では、上記の関数の引数はint型ではなくchar型となっています。例えば、tolower(char
c)
コンパイラによって多少仕様が異なったりすることもあるかもしれないので、お使いのコンパイラのマニュアル
で確認して下さい。
上の表にあげたものが、C言語の標準装備の文字検査・変換の関数ですが、日本のCコンパイラ
では、他に2バイト文字コードの検査用関数が各種用意されています。
例えばLSIC86では、以下のような関数があります。(以下、LSIC86のマニュアルから抜粋)
以下の関数は1バイトの文字コードcが以下のそれぞれの条件を満たすかどうかを判定し、
満たすなら0でない値を、そうでなければ0を返します。
iskana() カタカナのコード(0xA1 <= c
<= 0xDF) かどうか
iskpun() カタカナの区切り文字(0xA1 <=
c <= 0xA6) かどうか
iskmoji() カタカナの文字(0xA7 <= c
<= 0xDF) かどうか
isalkana() アルファベットまたはカタカナかどうか。これは(isalpha(c) ||
iskana(c))
と同じです
ispnkana() ASCIIまたはカタカナの区切り文字かどうか。これは(ispunct(c) ||
iskpun(c))
と同じです
isalnmkana() アルファベット、数字またはカタカナかどうか。これは(isalnum(c) ||
iskana(c))と同じです
isprkana() 印字可能なASCII文字あるいはカタカナかどうか。これは(isprint(c) ||
iskana(c))と同じです
isgrkana() 目に見えるASCII文字あるいはカタカナかどうか。これは(isgraph(c) ||
iskana(c))と同じです
iskanji() シフト JIS コードの1バイト目(0x81
<= c <= 0x9F あるいは0xE0 <= c
<= 0xFC) かどうか
iskanji2() シフトJISコードの2バイト目(0x40
<= c <= 0x7E あるいは0x80 <= c
<= 0xFC) かどうか
以下の関数は2バイトの文字コード(シフトJIS) cが以下のそれぞれのクラスに属するかどうか
を判定し、属するなら0でない値を、そうでなければ0を返します。 2バイトコードは
1バイト目が上位バイト、2バイト目が下位バイトにはいっていなければなりません。
jiszen() 全角文字(0x8140 <= c
<= 0xEFFC) かどうか
jisl0() 漢字以外の文字(0x8140 <= c
<= 0x889E) かどうか
jisl1() JIS第1水準(0x889F <= c
<= 0x9872) かどうか
jisl2() JIS第2水準(0x989F <= c <= 0xEA9E) かどうか
jisalpha() 全角英字かどうか
jisupper() 全角英大文字かどうか
jislower() 全角英小文字かどうか
jisdigit() 全角数字かどうか
jiskata() 全角カタカナかどうか
jishira() 全角ひらがなかどうか
jiskigou() 全角句読点かどうか
jisspace() 全角のスペースかどうか
では、簡単な使用例をあげてみます。まずは、入力した文字が英小文字かどうかを
islowerで検査し、英小文字でないものは'*'に置き換えます。例えば、パスワード登録で
使用不可の文字が入力されていないかどうかのチェックなどで、使ったりすることが
あるでしょう。
#include<stdio.h> #include<ctype.h> #include<string.h> main(){ char *c; int i,len; gets(c); len=strlen(c); for(i=0;i<len;i++) { if(islower(c[i])) printf("%c アルファベット小文字\n",c[i]); else {printf("%c アルファベット小文字ではない\n",c[i]); c[i]='*';} } puts(c); } |
実行結果です。
D:\win95\C>islower KasaYan86 K アルファベット小文字ではない a アルファベット小文字 s アルファベット小文字 a アルファベット小文字 Y アルファベット小文字ではない a アルファベット小文字 n アルファベット小文字 8 アルファベット小文字ではない 6 アルファベット小文字ではない *asa*an** D:\win95\C> |
次は、toupperで入力した文字を英小文字に変換する例です
#include<stdio.h> #include<ctype.h> main(){ int c; while((c=getchar())!=EOF){ putchar(toupper(c));} } |
実行例です。
D:\win95\C>toupper kasayan KASAYAN toupper TOUPPER ^C D:\win95\C> |
ユーティリティ系のプログラムを作成すると、これらの文字検査関数が必須となりますよね。
使い方に慣れて下さい。
TopPage