第1回文字列操作1(4月14日)

■ コンパイルと実行

  1. コンパイル: gcc -Wall ファイル名
  2. 実行: ./a.out

-Wall というオプションは、コンパイル時の警告をすべて表示 するという意味である。ささいな事も表示するので、思わぬミスを防ぐことが できる。

■ 文字列の格納

main 関数の中で宣言された大きさ MAX の文字型の配列変数 buff に、標 準入力から入力した文字を格納し、標準出力に表示するプログラムを作成せよ。

/* list0101.c */
#include <stdio.h>

#define MAX 20

int main()
{
  char buff[MAX];

  fgets( buff, MAX, stdin );

  /* ここより下は変更しない */

  printf("==========\n");
  printf("%s\n", buff);
  printf("==========\n");

  return 0;
}

■ 課題1

list0101.c を改造し、「abc」という入力に対して、以下の表示になるよ うにプログラムを変更せよ(prac0101.c とせよ)。ただし、list0101.c の中で 「ここより下は変更しない」とある行より上の部分を変更すること。fgets を 使用すること。この条件は以降の課題でも同様である。

==========
abc
==========

ヒント:文字列の長さを strlen で測り、もし、文字列の最後の文字(そ の長さ - 1 の文字)が '\n' ならば、何か加工をする。

■ 課題2

prac0101.c を改造し、MAX - 1 以上の長さの入力の際に、「Too long message error」と表示をして、エラー終了となるように変更せよ(prac0102.c)。

ヒント:main関数の中で、return を使用すると、プログラムを終了する ことができる。通常、返り値を 0 とすると正常終了、0 以外とすると異常終 了という意味である。

■ 課題3

文字列の中に、小文字のアルファベットが含まれていれば、大文字に変換 する機能を prac0102.c に追加せよ(prac0103.c)。

ヒント: ⇒ アスキーコード表

■ 課題4

文字列の中に、含まれている数字を1文字ごとに抽出し、その合計値を出 力する機能を prac0103.c に追加せよ(prac0104.c)。

以下に実行例を示す。

> ./a.out
abcdefghijklmnopqrstuvwxyz
Too long message error
> ./a.out
c1c2d34E
10
==========
C1C2D34E
==========

□ 宿題(小レポート)

次回の演習開始時に集めます。

□ 連絡事項

小レポートは採点後に、いったん返却します。返却されたレポートは各自 がファイルに綴じておいて下さい。最終レポートと同時にそのファイルを提出 してもらいます。その結果、初めて小レポートの点数を、成績に加算します。 大事にしておい下さい。なお、最後にファイルを提出してもらった後、ファイ ルは返却しません。


(c) Masato TOKUHISA (2006, April, 13.)