プログラミング論 第十九回 ・標準ライブラリ関数(文字列の処理) 本日の内容 標準ライブラリ関数とは? 文字列の処理 – 文字列の代入 – 文字列の長さを求める – 文字列の比較 – 文字列の連結 標準ライブラリ関数とは? プログラムは,いろんな処理を「関数」という単 位で行っています。 先週は,いくつかの関数を自作して利用する方 法を勉強しました。 しかし,C言語には,普段よく使う処理があらか じめ関数として用意されています。 printf,scanf,などです。 これらの関数を「標準ライブラリ関数」と呼びま す。 標準ライブラリ関数とは? どこで定義 #include <stdio.h> されているの int main(void) これが標 でしょう??{ double f( double x) double x,y; 準ライブラ リ関数です { double y; printf("x=?"); これは自作 scanf("%lf", &x); の関数です y = x*x+3*x+2; y = f(x); return y; } printf("y=%f\n",y); } ここで定義(説明)されています 標準ライブラリ関数とは? #include <stdio.h> printf( ・・・・ ) { int main(void) ・・・・・ { ・・・・・ } double f( double x) double x,y; ここで定義scanf( ・・・・ ) { { されている double y; printf("x=?"); ・・・・・ のです!!} scanf("%lf", &x); y = x*x+3*x+2; y = f(x); return y; } printf("y=%f\n",y); } 標準ライブラリ関数とは? printf()やscanf()などの標準ライブラリ関数は, 「ヘッダファイル」の中に種類毎に整理して保存 されています。 printf()やscanf()は,入出力に関する関数なの で,そのような関数を集めた,「stdio.h」という ヘッダファイルの中にその定義(説明)が書いて あります。 そのヘッダファイルを「include(含む)」処理する と,そのヘッダファイルの中にある関数が使え る,という訳です。 stdioは,STanDard Input Outputの略で,「標 準入出力」という意味になります。 文字列の処理 C言語には,文字列を処理するための便利な関 数が用意されています。 これらの関数は,「string.h」というヘッダーファ イルに定義されているので,これをincludeして 利用します。 次のような関数があります。 – – – – 文字列の代入(コピー) 文字列の長さを求める 文字列を比較する 文字列を連結する 文字列の処理 文字列の代入(コピー) char型では,1文字しか扱えません。 a char a; a=‘C’; ‘C’ 配列にすると文字列が入力出来ますが・・ char a[4]; h a m a a[0] a[1] a[2] a[3] 文字列の処理 文字列の代入(コピー) その入力方法は一文字ずつになってしまい, char a[4]; a[0]=‘h’; a[1]=‘a’; a[2]=‘m’; a[3]=‘a’; hama h a m a a[0] a[1] a[2] a[3] なかなか面倒です。。。 文字列の処理 文字列の代入(コピー) ところが,string.hにあるstrcpy()関数を使 うと,簡単に文字列の代入ができます! hama char a[4]; strcpy(a,”hama”); h a m a a[0] a[1] a[2] a[3] 文字列の処理 文字列の代入(コピー) ensyu54.cで関数strcpyの動作を確認し ましょう。 文字列の処理 文字列の長さを求める 文字列の長さ(文字数)を求める時は, strlen( )関数を用います。 strlen( )関数は,返り値として文字数を返 します。 ensyu55.cで動作を確認しましょう。 文字列の処理 文字列の長さを求める それでは,文字列の長さを求める関数を自分で 作ってみましょう。 ヒント – 文字列の最後には,’\0’が保存されています。 – ‘\0’を発見するまで文字をカウントしていけばよいこ とになります。 – 次のスライドのフローチャートを参考に考えてみま しょう。 ensyu56.cを完成させてください。 文字列の処理 文字列の長さを求める n=0; i=0; No s[i] !=‘\0’ Yes n++; i++; printf(“文字数=%d\n”,n); 文字列の処理 文字列を比較する 2つの文字列を比較する時は,strcmp( ) 関数を用います。 二つの文字列を比較して,同じ場合は0 を返り値として返します。 – 返り値は整数型です。 文字列が異なる場合は,どのような結果 が返ってくるでしょう? ensyu57.cで確認してください。 文字列の処理 文字列を比較する 二つの文字列が同じ場合の出力 文字列を入力してください(s1) abcdef 文字列を入力してください(s2) abcdef 文字列を比較します。。 比較結果は0です。 文字列の処理 文字列を比較する 二つの文字列が異なる場合の出力 文字列を入力してください(s1) abcdef 文字列を入力してください(s2) ghijkl 文字列を比較します。。 比較結果は-1です。 文字列を入力してください(s1) efghijkl 文字列を入力してください(s2) abcdefgh 文字列を比較します。。 比較結果は1です。 この違いは,どうして起こるのでしょう? 文字列の処理 文字列を比較する strcpy(s1, s2); の結果 返り値 意味 文字コードの比較 1 s1 > s2 s1の文字コードが大きい 0 s1 == s2 -1 s1 < s2 s1の文字コードが小さい *文字コードが「大きい」とは,その文字が辞書内で後ろにある事を意味します 文字列の処理 文字列を比較する ある文字列の中から,キーワードを検索するプ ログラムを作ってみましょう。 キーワードは,3文字の文字列とします。 ヒント – 文字列から,順に3文字ずつ抜き出して,キーワード と比較します。比較にはstrcmp( )を利用します。 – 一致したら,「一致しました」と表示し,何文字目に あったかを表示します。 – この処理を文字列の最後まで繰り返します。 ensyu58.cを完成させてください。 文字列の処理 文字列を連結する 文字列同士をつなげて一つの文字列に する時には,strcat( )関数を使います。 strcpy(s1, “ABCD”); strcpy(s2, “EFGH”); strcat(s1, s2); を実行すると。。 s1の文字列が,”ABCDEFGH”となります *ensyu59.cで動作を確認しましょう。
© Copyright 2025 ExpyDoc