Linux講座にようこそ。このページは「C言語プログラミング入門 - 第14章.ライブラリ関数 - 文字列処理ライブラリ」です。
strcat関数は2つの文字列を連結します。(第1引数で指定した文字列の後に、第2引数で指定した文字列を追加した形になります)使用する場合は次の点に注意してください。
形式 | #include <string.h> char *strcat(char *dest, const char *src); |
---|---|
返り値 | 第1引数destの先頭アドレスを返します。 |
引数 |
|
strncat関数は2つの文字列を連結します。strcat関数との相違は第3引数で連結する文字列の文字数を指定できることです。使用上の注意点もstrcat関数と同じです。
形式 | #include <string.h> char *strncat(char *dest, const char *src, size_t n); |
---|---|
返り値 | strcat関数と同じです。 |
引数 |
|
任意の数のメッセージを入力して、入力し終わったら表示します。メッセージの入力は「end」が入力されるか、10個入力されるまで続きます。入力したメッセージは文字列に蓄積しておき、入力し終わった時点で表示します。
$ ./ex14_2_4.prg メッセージを入力してください ==> Hi. メッセージを入力してください ==> Hello! メッセージを入力してください ==> Bye. メッセージを入力してください ==> Bye bye. メッセージを入力してください ==> end 入力したメッセージを表示します。 Hi. Hello! Bye. Bye bye. $
strchr関数は文字列から指定された文字を検索して、その位置を結果として返します。指定された文字が複数あった場合は最初に現れた文字の位置を返します。
形式 | #include <string.h> char *strchr(const char *str, int c); |
---|---|
返り値 | 探し出した文字のアドレスを返します。探し出せなかった場合はNULLを返します。 |
引数 |
|
strrchr関数は文字列から指定された文字を検索して、その位置を結果として返します。strchr関数との相違は指定された文字が複数あった場合は最後に現れた文字の位置を返します。
形式 | #include <string.h> char *strrchr(const char *s, int c); |
---|---|
返り値 | strchr関数と同じです。 |
引数 |
|
strstr関数は文字列から指定された文字列を検索して、その位置を結果として返します。指定された文字列が複数あった場合は最初に現れた文字列の位置を返します。
形式 | #include <string.h> char *strstr(const char *haystack, const char *needle); |
---|---|
返り値 | 探し出した文字列のアドレスを返します。探し出せなかった場合はNULLを返します。 |
引数 |
|
memchr関数はメモリ領域の指定された範囲内から指定された文字を検索して、その位置を結果として返します。
形式 | #include <string.h> void *memchr(const void *mem, int c, size_t n); |
---|---|
返り値 | 探し出した文字のアドレスを返します。探し出せなかった場合はNULLを返します。 |
引数 |
|
実行時引数で指定したテキストファイル中のタブ文字を半角スペースに置換して表示します。
$ cat -t ./DATA/ex14_2_5.dat ← -tはタブ文字を表示するオプションです。 main() { ^Ishort^Ibango^I=^I12; ← ^Tはタブ文字を表します。 ^Iint^Inenrei; ^Ifloat^Itaijyu^I=^I65.5; ^Idouble^Isintyo; ^Ichar^Iketueki^I=^I'A'; } $ $ ./ex14_2_5.prg ./DATA/ex14_2_5.dat main() { short bango = 12; int nenrei; float taijyu = 65.5; double sintyo; char ketueki = 'A'; } $
strtok関数は文字列中の区切り文字で区切られた字句(項目)を取り出します。例えば、CSV形式のテキストファイルから各項目を取り出すような時に使用すると便利です。ただし、使い方が少し複雑で次のような使用手順になります。
なお、解析対象文字列の先頭や末尾にある区切り文字は無視し、2つ以上の区切り文字が連続している場合には1つの区切り文字とみなします。
形式 | #include <string.h> char *strtok(char *str, const char *delim); |
---|---|
返り値 | 取り出した項目の先頭アドレスを返します。取り出す項目がない場合はNULLを返します。 |
引数 |
|
下記のような,(コンマ)で区切って、番号・名前・体重・身長・血液型のデータが登録されているex14_2_6.datファイルを入力して標準出力に出力します。なお、各項目の最大文字数はヌル文字を含めて21文字とします。
このデータの場合、名前は半角スペースを含んでいますし血液型は省略可能ですので、scanf関数で入力するのは難しいため、ここではfgets関数で1行入力後、strtok関数で各項目を取り出しています。
$ ./ex14_2_6.prg No. NAME WEIGHT HEIGHT BLOOD 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 $