






8.アルファベット、数字、空白からなる文字列を渡したとき、小文字を大文字にする関数 void to_low(char s[]); を作成しなさい。(提出前に正しく動作することを試すこと。)
「ここで聞かれているのはまず何か?」考えましょう。
今ここで問われていることは関数を作ること。
ではどんな関数か?
「アルファベット、数字、空白からなる文字列を渡したとき、小文字を大文字にする関数」
つまり"Hello"を"HELLO"、"2008 year"を"2008 YEAR"にするような関数を作ればよいわけです。
これは授業では説明されていない部分ですが、いたって難しい事ではありません。
まず、プログラムの全体を書いてみます。
|
|
#include <stdio.h> void to_low(char s[]); |
まずはじめにおまじない(ヘッダファイルをインクルード)とプロトタイプ宣言をします。
プロトタイプ宣言いついては型名と引数が問題文に書いてあるとおりですね。
ここでは型名はvoid、引数はchar s[]となっております。
関数・プロトタイプ宣言についての記述は別途書いておきます。
次にmain()関数です。
この中には具体的な指定はないので文字列を表示した後に、作った関数を呼び出して、もう一度その文字列を表示するプログラムを作ります。
●main()関数に記述すること
|
int main(void){
} |
●1・文字列を格納する変数を宣言
引数の中に入れる変数の配列を宣言しておきましょう。
ここでは文字列を格納するため、char型の配列を取りましょう。
| char 変数名[]="Hello in 2008"; |
●2・文字列を表示させる
| printf("%s",a); |
●3・to_low()関数を呼び出す
| to_low(文字列が入っている配列の変数名); |
●4・再び文字列を表示させる
上記の文字列を表示させるものと同じなので省略。
/*ポイント*/これでメイン関数には変換前と変換後の文字列を確認するプログラムが書けた訳です。
それではto_low()関数には何を書けばいいのか考えて見ましょう。void to_low(char s[]){
|
| whie( 文字列の長さの分だけ){ } |
| char a[]="Hello in 2008" |
上の配列aには
|
a[0] ='H' |
ということですね。
つまり、一つずつ確かめて'\0'が含まれていたら文末ということになりますね。
while文にあわせて言い換えると、a[i]が'\0'ではない間だけ繰り返すことになります
| while(a[i] != '\0' ) |
とすれば文字列の分だけ繰り返すことになります。
●文字を小文字か見分ける。
小文字を見分けるためにはif文を使います。if文は数字だけではなく、文字も見分けることができます。
ここで文字と数字のことに説明します。詳しくは別途記述しておきます。
実は文字と言うものは数値に置き換えられるのです。
ちなみに'A'と言う文字は十進数では65、'a'と言う文字は十進数で97です。
| 文字 |
10進数 |
文字 |
10進数 |
|---|---|---|---|
| 'A' |
65 |
'a' |
97 |
| 'B' |
66 |
'b' |
98 |
| 'C' |
67 |
'c' |
99 |
| 'D' |
68 |
'd' |
100 |
| 'E' |
69 |
'e' |
101 |
| 'Z' |
90 |
'z' |
122 |
という風に対応しています。
このように文字に対する数字の対応表をASCIIコード表と言います。
ASCIIコード表については別途説明します。
それでは、せっかくa[i]を作ったのでこれを利用しましょう
| if(a [i] == 'a' && a[i] == 'b' && …&& a[i] == 'z') |
| if (a[i] >= 97 && a[i] <=122) |
●もし小文字なら大文字にかえる
これが最後の説明となります。
小文字を大文字に変えるということはどういうことか?
先ほどの項目でも言いましたが、文字は数字に対応しています。
ASCIIコード表を見てみましょう
|
(表) 'B'→66 'b'→98 'C'→67 'c'→99 'D'→68 'd'→100 'E'→69 'e'→101 : : 'Z'→90 'z'→122 |
小文字から大文字に変わると言うことは32移動していること、と言うことが見て取れる。
つまり、小文字に32を足せばそれぞれに対応した大文字に変換できる。
●最後に…
これで今回の8番の課題の説明は終わりです。いったん作成したプログラムをコンパイルして実際に値が出るかを試してみてください。
プログラミングは難しいものです、慣れるまで苦労すると思うですががんばっていきましょう。ここまで、見てくれてありがとうございました。そして、お疲れ様です。
一応第一回目なのでできるだけ詳しく書いたつもりです。その他に見づらい、わかりづらい等の意見。間違っている記述、誤字脱字等があればコメントに残しておいてください。