Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 文字列処理ライブラリ」です。
strspn関数は文字列の先頭からの文字が、指定された文字の組み合わせ(文字セット)から成る文字列か否かをチェックします。
形式 | #include <string.h> size_t strspn(const char *str, const char *keyset); |
---|---|
返り値 | 文字セットと一致した文字の数を返します。一致しなかった場合は0を返します。 |
引数 |
|
trcspn関数は文字列の先頭からの文字が、指定された文字の組み合わせ(文字セット)以外から成る文字列か否かをチェックします。
形式 | #include <string.h> size_t strcspn(const char *str, const char *keyset); |
---|---|
返り値 | 文字セット以外と一致した文字の数を返します。一致しなかった場合は0を返します。 |
引数 |
|
テキストファイル中の英字(a〜z、A〜Z、半角スペース)の部分だけを抽出して表示します。
$ cat ./DATA/ex14_2_6.dat 1,Merry Husky,67,188,A 2,Kuma Mix,98,176.5 3,Hana Shiba,43.2,156.5,AB 4,ken Mix,55.5,167.5 5,Taro Bull,75.7,166.5,A $ $ ./ex14_2_7.prg Merry Husky A Kuma Mix Hana Shiba AB ken Mix Taro Bull A $
strcoll関数は現在のロケール(地域情報)に従い二つの文字列を比較します。半角文字や全角の英数字・ひらがな・カタカナの場合はstrcmp関数やstrncmp関数と結果は同じになります。これは、文字セット中での文字の順序が辞書式の文字の順序(コードの値による順序)と同じだからです。
strcoll関数は日本語の漢字のように、文字セット中での文字の順序が辞書式の文字の順序と異なる場合がありかつ、文字セット中での文字の順序により大小関係を得たい場合に使用します。単に、等しいか否かを判定したい場合は、strcmp関数やstrncmp関数を使用した方がよいでしょう。
また、ロケールのデフォルト(プログラムの起動時)は「C」が設定されており、この状態ではstrcmp関数やstrncmp関数と同じ結果になります。従って、strcoll関数を使用する前に、setlocale関数でロケール(LC_COLLATEカテゴリ)を設定しておく必要が有ります。
形式 | #include <string.h> int strcoll(const char *str1, const char *str2); |
---|---|
返り値 | strcmp関数やstrncmp関数と同じく、比較結果を次のような値で返します。
|
引数 |
|
strxfrm関数はstrcoll関数とstrcmp関数(又は、strncmp関数)で比較した結果が同じになるように文字列を変換します。変換はstrcoll関数と同じくロケールに従います。
形式 | #include <string.h> size_t strxfrm(char *dest, const char *src, size_t n); |
---|---|
返り値 | 変換後の文字列(dest)のヌル文字を含まない文字数を返します。第3引数nより大きな値の場合は結果は不定です。 |
引数 |
|
2つの文字を入力して、strcoll関数とstrcmp関数で比較して、その結果を表示します。実行結果を見ていただくと分かる通り、同じ文字でも結果が異なることが有ります。
$ ./ex14_2_8.prg 1文字目を入力してください ==> あ 2文字目を入力してください ==> い strcoll : あ < い strcmp : あ < い $ $ ./ex14_2_8.prg 1文字目を入力してください ==> 阿 2文字目を入力してください ==> 哀 strcoll : 阿 < 哀 ← 「阿」の方が小さい strcmp : 阿 > 哀 ← 「阿」の方が大きい $ $ ./ex14_2_8.prg 1文字目を入力してください ==> 哀 2文字目を入力してください ==> 愛 strcoll : 哀 < 愛 strcmp : 哀 < 愛 $ $ ./ex14_2_8.prg 1文字目を入力してください ==> ♂ 2文字目を入力してください ==> ♀ strcoll : ♂ < ♀ strcmp : ♂ > ♀ $