第5章 演習問題1 ~2次元配列を使う~

 次に(2)の部分になりますが、strlen(stringのlength(長さ)という意味)という 関数も初めてみることかと思います。 これは、ちょっとおまけで無理矢理に使ってみただけなので、皆さんはなくて結構です。

 関数 strlenは、文字列を引数に与えるようになっています。 何をしてくれる関数かというと、与えられた文字列の長さを計算してくれます。 当然、計算結果を受け取れないと計算しても全く意味がないので、戻り値というものにして返してくれます。

 ここで、戻り値について説明しましょう。(2)の処理をもう一度見て下さい。

 ここでは、まず初めにstrlen関数の中が処理されます。 関数strlenは、その中で、与えられた文字列の長さを数える処理をします。 そして、その計算結果を戻り値という箱に入れて、 関数の呼び出し元(この場合はmain)に返してくれます。

 見た目で言うと、strlen( )と書かれているところが、 数えた文字列の長さに置き換わってくれたようになります。 そして、それが変数ReturnValueに代入されているのです。

  ReturnValue = strlen(“abcdef”);
           ↓ 関数strlenが処理された後
  ReturnValue =  6;

 引数が関数に与える情報ならば、戻り値とは関数からの返事のようなものなのです。 それでは、戻り値が使われている例を、もう少し見てみましょう。

 だいぶ難しい例題なので、今すぐに理解できなくても構いません。

— リスト15 —

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void main()
{
  char buffer[256];     /* 文字列の一時的な格納領域 */
  int  return_value;    /* 文字列の比較結果       */
  int  number;       /* 変換後の数値          */

  /**
   * ユーザに名前の入力を促す
   */
  printf("あなたの名前を、入力して下さい\n");
  gets(buffer);

  /**
   * 名前が太郎であるか比較する
   */
  return_value = strcmp("太郎", buffer);


  /**
   * 比較結果に応じて、メッセージを出力する
   */
  if (return_value == 0) {
    printf("あなたは、太郎さんですね\n");
  } else {
    printf("あなたは、太郎さんではなく、%sさんですね\n", buffer);
  }

  /**
   * ユーザに数字の入力を促す
   */
  printf("何桁かの数字を入力して下さい\n");
  gets(buffer);

  /**
   * 文字列を整数型の数値に変換する
   */
  number = atoi(buffer);

  /**
   * 数値の奇偶に応じて、メッセージを出力する
   */
  if ((number % 2) == 0) {
    printf("偶数%dを入力しましたね\n", number);
  } else {
    printf("奇数%dを入力しましたね\n", number);
  }
}

 いきなり、二つの関数が出てきましたね。 strcmp(stringをcompare(比較する)の意味)と、 atoi(ascii(文字コードの内の一つ)to integerの略)の二つが出てきました。

 名前の通り、strcmp( ) は文字列の比較を行ってくれる関数です。 関数の中で比較処理を行い、その結果を戻り値にして返してくれます。

 strcmpの戻り値は、上の表のようになっています。 文字列同士の比較に大小があるなんて、あまりピンと来ないかも知れません。 これは難しいことですが、次のように決まっています。

 文字列同士を先頭の文字から順に比較していって、 最初に食い違った文字が文字コードの順番で、若いか若くないかを大小とする。

 atoi( ) は、数字を使って構成された文字列を、int型(整数型)の値に変換してくれる関数です。 画面から入力された値は、たとえ数字でも文字列として存在しています。 つまり、”12345”と同じことになり、+や-を使った演算(計算)や比較ができません。 ですから、関数atoiを使って、int型の値に変換する必要があるのです。

 もっとも変換と言っても、引数に与えた文字列を勝手に書き換えてしまうわけではありません。 安全に、戻り値に入れて返してくれます。

 最後に、二つほど。

 strlen(“abcde”); は5を返してきます。
 strlen(“あいうえお”); ならいくつが返ってくるのでしょう。

 atoi(“123456789abc”); と、
 atoi(“abc123456789”); では、それぞれどんな戻り値になるでしょう。

 時間が余っていれば、調べてみて下さい。

< 前のページへ
お問い合わせ
  • ようかん
  • SG Labs(エスジー ラボ)
  • ITERACY
  • RiceLog(ライスログ)
  • Salesforce導入コンサルティング
  • SES営業向け用語講座

Pagetop