string.h
strcmp (const char *s1, const char *s2 )
s1,s2文字列が同じかどうかを比較する関数。ヌル文字が出現した時点で比較は終了。
char s1[10]="abc\0def"; char s2[10]="abc\0hij"; if(strcmp(s1,s2) == 0){ printf("同じ文字列"); }else{ printf("異なる文字列"); }
出力
同じ文字列
strncmp (const char s1, const char s2, int n )
s1,s2文字列の始めの文字からn番目の文字までを比較する関数。ヌル文字が出現した時点で比較は終了。
memcmp (const void *s1, const void *s2, int n )
s1,s2の最初のメモリ領域からnバイトのメモリ領域の内容を比較する関数。
どんな型でも比較可能。ヌル文字は1バイトと認識されるため、確実にnバイト比較される。(当たり前だけれど、途中で一致していないと分かったらそこで比較終了)
そのため、strncmpではなくmemcmpを使うことも多い。
char s1[10]="abc\0def"; char s2[10]="abc\0hij"; if(strcmp(s1,s2,7) == 0){ printf("同じ文字列"); }else{ printf("異なる文字列"); }
出力
異なる文字列
stricmp (const char *s1, const char *s2 )
英字の大小を区別せず文字列比較。他はstrcmpと同じ。
stricmp (const char *s1, const char *s2, int n )
英字の大小を区別せず文字列比較。他はstrncmpと同じ。
ctype.h
isalnum (int c )
文字cが英数字かそれ以外かを調べる関数。
引数の文字一つを調べるため、char cではなくint cという書式になっている。
int cのcを、%cで文字表示すると、ASCLLコードc番が参照されますよね。少し紛らわしいですが、書式上そう書かざるを得ないだけで、引数cはほぼchar型でしか使われません。
char *c = "a1#" for(int i=0; i<3; i++){ if(isalnum(c[i]) == 0){ printf("%cは英数字ではないです\n",c[i]); }else{ printf("%cは英数字です\n",c[i]); } }
出力
英数字です
英数字です
英数字ではないです
isalpha (int c )
文字cが英字かどうかを調べる。
isupper (int c )
文字cが英字の大文字かどうかを調べる。
islower (int c )
文字cが英字の小文字かどうかを調べる。
isdigit (int c )
文字cが10進数の数字かどうかを調べる。
isxdigit (int c )
文字cが16進数の数字かどうかを調べる。
iscntrl (int c )
isgraph (int c )
isprint (int c )
ispunct (int c )
isspace (int c )