第3回目 文字列・その1(4/24)

□ メモ

今日の目標

■ 配列変数による文字列

宣言
char 変数名[サイズ]; サイズは,文字数 + 1 だけ必要
文字列の代入
  1. 代入する領域を確保
  2. 1文字ずつを代入
  3. 文字列の終端に null文字('\0')を代入
char s1[4];    /* 領域確保 */
s1[0] = 'a';   /* 1文字を代入 */
s1[1] = 'b';
s1[2] = 'c';
s1[3] = '\0';  /* null文字を代入 */

□ 演習1

長さ20以下の文字列を入力し,画面に表示するプログラム(但し,半角英数文字のみが入力されるものとする)
/* list0301.c */
#include<stdio.h>
main()
{
  char s[21]; /* 文字を20個および\0を格納する場所を作る */
  int i;

  fgets(s,21,stdin); /* 高々20文字を入力しsに書き込む.終端に\0も書き込む */

  for(i=0;i<21;i++){
    putchar(s[i]);
  }
  printf(”\n”);
}
list0301.c を改造せよ.
  1. list0301.c を実行し,「This is a pen.」を入力してみると,ゴミが表示される.このプログラムでは null 文字を処理していないためである.正しく表示されるように改良せよ.ただし,printf は使わずに,for文の条件やブロック内で対処すること.⇒ prac0301.c
  2. また,null文字を処理しただけでは,余分な改行が出力される.これは,fgets では改行文字も書き込むためである.改行文字を null 文字に置き換えよ.⇒ prac0302.c
  3. 文字列を逆順に表示せよ.⇒ prac0303.c

■ 文字列の定数

文字列定数のしくみ

■ 文字列と関数

関数の仮引数に文字列を与える場合

□ 演習2

以下の関数を作れ
  1. 英文を入力し,空白の数を返す関数 int count_spc(const char s[]); を作れ ⇒ prac0304.c
  2. prac0304.c を改造し,連続する空白は1つと数えるようにせよ.⇒ prac0305.c
メイン関数の例
/* prac0304.c */
#include <stdio.h>

int count_spc(const char s[])
{
  ???
}

main()
{
  char sentence[BUFSIZ];

  fgets(sentence,BUFSIZ,stdin);
  printf(”空白の数は %d 個です\n”,count_spc(sentence));
}

■ 宿題


(c) Masato TOKUHISA, 2003, April. 16