Index |
 |
HOME >
プログラムTOP >
C++ |
|
C++の壺・文字確認篇
C++の基本テクニックのTipsです。文字確認篇では、ある一文字が数字であるか、アルファベットであるかなど、文字の種類を確認する方法を扱います。

ある文字がどのタイプであるかを調べるには、文字コードから判断します。基本的な文字コードの配置は下表の通りです。なお、値の()内は16進値、[]付きの文字は制御文字を表します。
| 値 | 文字 |
| 値 | 文字 |
| 値 | 文字 |
| 値 | 文字 |
| 0(00) | [NUL] | 32(20) | (空白) | 64(40) | @ | 96(60) | ` |
| 1(01) | [SOH] | 33(21) | ! | 65(41) | A | 97(61) | a |
| 2(02) | [STX] | 34(22) | " | 66(42) | B | 98(62) | b |
| 3(03) | [ETX] | 35(23) | # | 67(43) | C | 99(63) | c |
| 4(04) | [EOT] | 36(24) | $ | 68(44) | D | 100(64) | d |
| 5(05) | [ENQ] | 37(25) | % | 69(45) | E | 101(65) | e |
| 6(06) | [ACK] | 38(26) | & | 70(46) | F | 102(66) | f |
| 7(07) | [BEL] | 39(27) | ' | 71(47) | G | 103(67) | g |
| 8(08) | [BS] | 40(28) | ( | 72(48) | H | 104(68) | h |
| 9(09) | [HT] | 41(29) | ) | 73(49) | I | 105(69) | i |
| 10(0a) | [LF] | 42(2a) | * | 74(4a) | J | 106(6a) | j |
| 11(0b) | [VT] | 43(2b) | + | 75(4b) | K | 107(6b) | k |
| 12(0c) | [FF] | 44(2c) | , | 76(4c) | L | 108(6c) | l |
| 13(0d) | [CR] | 45(2d) | - | 77(4d) | M | 109(6d) | m |
| 14(0e) | [SO] | 46(2e) | . | 78(4e) | N | 110(6e) | n |
| 15(0f) | [SI] | 47(2f) | / | 79(4f) | O | 111(6f) | o |
| 16(10) | [DLE] | 48(30) | 0 | 80(50) | P | 112(70) | p |
| 17(11) | [DC1] | 49(31) | 1 | 81(51) | Q | 113(71) | q |
| 18(12) | [DC2] | 50(32) | 2 | 82(52) | R | 114(75) | r |
| 19(13) | [DC3] | 51(33) | 3 | 83(53) | S | 115(76) | s |
| 20(14) | [DC4] | 52(34) | 4 | 84(54) | T | 116(74) | t |
| 21(15) | [NAK] | 53(35) | 5 | 85(55) | U | 117(75) | u |
| 22(16) | [SYN] | 54(36) | 6 | 86(56) | V | 118(79) | v |
| 23(17) | [ETB] | 55(37) | 7 | 87(57) | W | 119(7a) | w |
| 24(18) | [CAN] | 56(38) | 8 | 88(58) | X | 120(78) | x |
| 25(19) | [EM] | 57(39) | 9 | 89(59) | Y | 121(79) | y |
| 26(1a) | [SUB] | 58(3a) | : | 90(5a) | Z | 122(7a) | z |
| 27(1b) | [ESC] | 59(3b) | ; | 91(5b) | [ | 123(7b) | { |
| 28(1c) | [FS] | 60(3c) | < | 92(5c) | \ | 124(7c) | | |
| 29(1d) | [GS] | 61(3d) | = | 93(5d) | ] | 125(7d) | } |
| 30(1e) | [RS] | 62(3e) | > | 94(5e) | ^ | 126(7e) | ~ |
| 31(1f) | [US] | 63(3f) | ? | 95(5f) | _ | 127(7f) | [DEL] |
文字コードには、JIS, Shift-JIS, EUC, Unicode などがありますが、上記の範囲では、'\' (0x5c) , '~ ' (0x7e) , [DEL] (0x7f) 以外は同じ値と文字の対応となっています。 (漢字などの2バイト文字は、文字コードの種類ごとにコード番号が異なります)
文字の確認には、前節であげた文字コードから判断します。値(10進、16進、8進)を使っても文字('x')を使っても同じ結果となります。
#include <stdio.h> // printf
#include <conio.h> // getch
// 数字の文字確認
bool isnumeric(char c)
{
if (48 <= c && c <= 57) {
return true;
}
return false;
}
// main 関数
void main()
{
char c = 'f';
bool b = isnumeric(c);
printf("%d\n", b); // = 0
if (getch()) return;
}
| #include <stdio.h> // printf
#include <conio.h> // getch
// アルファベットの文字確認
bool isalphabet(char c)
{
if (('A' <= c && c<= 'Z') ||
('a' <= c && c <= 'z'))
return true;
return false;
}
// main 関数
void main()
{
char c = 'f';
bool b = isalphabet(c);
printf("%d\n", b); // = 1
if (getch()) return;
}
|
C/C++ では、文字の種類の確認のために、以下のような関数が用意されています。また、ライブラリによっては、様々な種類のis系関数が定義されています。(isw...系、ismbc...系、jis...系、など)
| is... macro |
| ・書式 | int is_pattern( int c ); |
| ・機能 | 文字がpatternであるかの確認 |
| ・引数 | c ... 確認する文字 |
| ・戻り値 | 文字がpatternなら0以外、それ以外は0 |
| ・要件 | ctype.h のインクルード |
| is_pattern
| ・ isdigit | 数字 : 0...9 |
| ・ isxdigit | 16進の数字 : 0...9, A...F, a...f |
| ・ isalpha | アルファベット : A...Z, a...z |
| ・ isalnum | アルファベットか数字 : 0...9, A...Z, a...z |
| ・ isupper | 大文字 : A...Z |
| ・ islower | 小文字 : a...z |
| ・ iscntrl | 制御文字 : 0x00...0x1f, 0x7f |
| ・ isspace | 空白、タブ、改行 : 0x09...0x0d, 0x20 |
| ・ ispunct | 区切り文字(isalnumと空白以外) |
| ・ isprint | 印字可能文字 : 0x20...0x7e |
| ・ isgraph | 空白以外の印字可能文字 |
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
// main 関数
void main()
{
char c = 'f';
int n;
n = isdigit(c); // 数字
printf("%d\n", n); // = 0
n = isalpha(c); // アルファベット
printf("%d\n", n); // = 1
n = (isdigit(c) || isspace(c)); // 数字か空白
printf("%d\n", n); // = 0
if (getch()) return;
}
|
www.sasaraan.net |
(c) morijoh |