画像(logo)

HOME/[C言語 入門]小学生でもわかるC言語 目次/十三日目 配列と文章!

広告

[C言語 入門 小学生でもわかるC言語]
十三日目 配列と文章!

広告

↓2016年02月29日発売↓

12歳からはじめる ゼロからのC言語 ゲームプログラミング教室

目次へ戻る

文字を並べる

配列に一文字を並べる事によって文章を書くことができます!

/*十三日目 プログラム1*/
#include <stdio.h>

int main(){
	char moji_hairetu[6];

	moji_hairetu[0] = 'h';
	moji_hairetu[1] = 'e';
	moji_hairetu[2] = 'l';
	moji_hairetu[3] = 'l';
	moji_hairetu[4] = 'o';
	moji_hairetu[5] = 0;

	printf("%s\n",moji_hairetu);
	
	return 0;
}

■実行結果■

画像(cb_13_1)

■説明■

配列にして一文字を並べる事によって文章を作る事ができました!

まずは文章の文字の数だけ配列を用意するのですが、

char moji_hairetu[6];

「文字数+ちょっと」多めに配列を用意しましょう!

printf("%s\n",moji_hairetu);

表示する時は「%s」を使います。お尻の「moji_hairetu」に配列番号はつけなくて大丈夫です!

一文字ずつ表示させたい時は

printf("%c",moji_hairetu[3]);

「%c」を使って配列番号を選んであげます。

「0」ってなんだ?

moji_hairetu[5] = 0;

お尻に余計な「0」がくっついてますね。これは文章を表示する時に使う「%s」に文章の終わりを教える目印になります。

前回に学んだ番兵と同じような仕組みですね!

多めな文字数というのは、この「0」の分になります。

この「0」がないとひたすら「0」が現れるまで読みだそうとします。

そしてこの「0」なかったり、文字数がオーバーして配列からはみ出してしまうとプログラムが暴走してしまうのでギリギリではなく多めに用意しましょう!

簡単に書きましょう!

/*十三日目 プログラム2*/
#include <stdio.h>

int main(){
	char moji_hairetu[40] = "オムライスはケチャップ派です!";
	char moji_hairetu2[] = "目玉焼きはしょう油派です!";

	printf("%s",moji_hairetu);
	
	printf("\n");

	printf("%s",moji_hairetu2);

	printf("\n");

	return 0;
}

■実行結果■

画像(cb_13_2)

■説明■

「"」で囲むことによって簡単に書くことができます!

お尻の「0」も自動的にくっつけてくれます。

char moji_hairetu[40] = "オムライスはケチャップ派です!";

一つずつ書かなくていいのでラクですね!

さらに配列番号を省略すると勝手に文字数分を用意してくれます!

char moji_hairetu2[] = "目玉焼きはしょう油派です!";

これでいちいち文字数を数える必要はありません。

全角文字(漢字やひらがな)は2つ分必要です!

全角文字っていうのは簡単に言うと漢字やひらがななどのでっかい文字です。

キーボード左上の「半角/全角」キーを押した時の文字ですね!

全角文字

「あいうえお・漢字・アイウエオ・ABCDE・abcde」

半角文字

「abcde・ABCDE・アイウエオ」

全角文字は言葉通りでっかいので2文字分用意する必要があります!

さきほどのプログラムのように配列番号を書かなければこの事を考える必要はないので大丈夫です。

文字コードのヒミツ

文字コードっていうのは漢字、ひらがな、英語などいろいろな文字が書いてある表になります。

文字一つ一つに番号が付いていてコンピューターはこの番号をもとに文字を表示したりしてます。

プログラムで文字コードを確認してみましょう!

/*十三日目 プログラム3*/
#include <stdio.h>

int main(){

	char moji = 'A';

	printf("「A」の文字コードは%d番です!\n",moji);

	return 0;
}

■実行結果■

画像(cb_13_3)

■説明■

printf("「A」の文字コードは%d番です!\n",moji);

文字を表示する時の「%c」を「%d」にかえる事によって文字コード番号を調べる事ができます。

「A」は65番と出ました。ちなみに「a」は97番になります。

このように同じ文字に見えてもコンピューターにとっては全く別のものという事を覚えてください。

文字コードもいろいろ

世界中の人が同じ言語のコンピューターを使うわけではないので、文字コードにも種類があります。アルファベットはだいたい世界共通なので文字コード番号も同じですが、全角文字などは文字コード番号が同じでも違う文字になってる場合があります!

文字コードで遊ぼう!

文字コードの仕組みを使って遊びましょう!

/*十三日目 プログラム4*/
#include <stdio.h>

int main(){
	char moji = 'a';

	printf("moji = %c\n",moji);
	
	printf("moji + 1 = %c\n",moji + 1);

	return 0;
}

■実行結果■

画像(cb_13_4)

■説明■

printf("moji + 1 = %c\n",moji + 1);

変数「moji」に「+1」すると「b」になりました!

カンの良い方はわかるかと思いますが、文字コードはある程度規則正しく並んでいるので97番の隣の98番は「b」になるのです!

続いて次のプログラムを実行してみてください。

/*十三日目 プログラム5*/
#include <stdio.h>

int main(){
	int moji_code1 = 97;
	int moji_code2 = 98;
	int moji_code3 = 99;

	printf("%c\n",moji_code1);
	printf("%c\n",moji_code2);
	printf("%c\n",moji_code3);

	printf("\n");

	printf("%c\n",97);
	printf("%c\n",98);
	printf("%c\n",99);

	return 0;
}

■実行結果■

画像(cb_13_5)

■説明■

いろいろな方法で文字を表示してみました。

プログラムを見てみると、数字の時に使う「int」で数字を指定して表示したりその後は直接数字を入れて表示したりしています。

文字は計算できる!?

という事は前にも言いましたが、上のプログラムで言うと変数「moji_code1」を足したり引いたりして「%c」で表示すれば計算によって他の文字を表す事ができるのです!

例えばこの仕組みと、どうにか0〜25までの数字をランダムに発生させる事が出来ればそれらを組み合わせてタイピングゲームなどが作れそうですね!

広告

全角文字は難しい!

ひらがな・漢字などの全角文字は難しいのでやり方だけご紹介します。

/*十三日目 プログラム6*/
#include <stdio.h>

int main(){
	printf("「あ」の文字コード = %x",'あ');

	printf("\n\n");
	printf("「あ」を表示→%c%c",0x82,0xa0);
	printf("\n");
	printf("「い」を表示→%c%c",0x82,0xa0 + 2);
	printf("\n");

	return 0;
}

■実行結果■

画像(cb_13_6)

■説明■

まずは文字コードを調べるのに「%x」というのを使います。

printf("「あ」の文字コード = %x",'あ');

調べたい文字をお尻で「'」で囲みます。そしてでてきた「あ」の文字コードは

82a0

となってますね。数字とアルファベットが一緒になってます。

次にこれを「82」と「a0」の2つに分けます。

あとは表示する方法ですね!全角文字は2つ分使うといいました。なので表示する時もやっぱり2つ「%c」を並べます。

printf("「あ」を表示→%c%c",0x82,0xa0);

そしてお尻にさきほどの2つに分けた「82」と「a0」の先頭に「0x」を付けて間を「,」で区切って並べれば大丈夫です!

次の「い」を表示したい時は2つ分の全角文字なのでやっぱり「+2」と2つ分進めます。

漢字もいちよう同じやり方で大丈夫です!

もしかして!と思って

printf("「あ」を表示→%c",0x82);

みたいに「あ」の半分を表示しようと試みるかもしれませんが、そんな世の中上手くもいかないのであきらめてください。

「%x」?

16進数で表示する時はこれを使います。16進数っていうのは2進数なんかと同じ数の進み方です。16になるとケタが上がります。いつも使っているものは10進数といいます。10になるとケタが上がります。

10進数

123456789→10

16進数

123456789abcde→10(足りない「10〜15」までを「a〜f」にします。)

つまり16進数で「10」は10進数の「16」になります。

時計の13時が1時になるのと同じ感じです。

コンピューターは実は10進数を使うのが苦手なのです。16進数という謎の進み方のほうが使いやすいのです。

使う時はさきほどのように頭に「0x」をつけます。これでその数字はコンピューターが16進数なんだなと判断してくれます。

「%d」で試してみる

試しに「あ」の文字コードをいつもどおり「%d」で表示してみると

/*十三日目 プログラム7*/
#include <stdio.h>

int main(){
	printf("%d",'あ');

	printf("\n");

	printf("%c%c\n",130,160);

	return 0;
}

■実行結果■

画像(cb_13_7)

■説明■

少し結果が違うかもしれませんが謎の数字がでてきたと思います。

ちなみにこの数字をそのままお尻につけても正しく「あ」と表示されないと思います。

そのあとの

printf("%c%c\n",130,160);

この「130」と「160」っていうのはさきほど分けた「82」と「a0」を10進数に直したものになります。

文章の入力

「scanf」命令で受け取る変数を配列にすれば文章を受け取る事ができます!

/*十三日目 プログラム8*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(){
	char moji_hairetu[40];

	printf("お名前を入力してください!");

	scanf("%s",moji_hairetu);

	printf("あなたの名前は%sさんですね!\n",moji_hairetu);

	return 0;
}

■実行結果■

画像(cb_13_8)

■説明■

文章を受け取るのでやっぱり「%s」を使います。

scanf("%s",moji_hairetu);

使い方もほとんど変わらないので大丈夫ですね!「moji_hairetu」に配列番号はつきません。

「&」もついてないですね!

この時、文章の終わりを表す「0」は自動でくっついてくるのでその分やっぱり多めに配列の文字数を用意しましょう!

文字列の変更

文字列と言っても最初に言ったように一文字一文字の集まりなので、文字数をオーバーしないように注意してお尻の「0」も自分でつければ内容を変更する事もできます。

/*十三日目 プログラム9*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

int main(){
	int i;
	char bunsyou[] = "hello world";

	printf("%s\n",bunsyou);
	for(i=0;i<11;i++){
		printf("[%c]",bunsyou[i]);
	}

	printf("\n\n");

	bunsyou[0] = 'g';
	bunsyou[1] = 'o';
	bunsyou[2] = 'o';
	bunsyou[3] = 'd';
	bunsyou[4] = ' ';
	bunsyou[5] = 'b';
	bunsyou[6] = 'y';
	bunsyou[7] = 'e';
	bunsyou[8] = 0;

	printf("%s\n",bunsyou);
	for(i=0;i<8;i++){
		printf("[%c]",bunsyou[i]);
	}

	printf("\n\n");

	strcpy(bunsyou,"thank you");

	printf("%s\n",bunsyou);
	for(i=0;i<9;i++){
		printf("[%c]",bunsyou[i]);
	}

	printf("\n");

	return 0;
}

■実行結果■

画像(cb_13_9)

■説明■

一つ一つの内容を変更して最後に「0」をつければ違う文章に変更できます。

bunsyou[0] = 'g';
bunsyou[1] = 'o';
bunsyou[2] = 'o';
bunsyou[3] = 'd';
bunsyou[4] = ' ';
bunsyou[5] = 'b';
bunsyou[6] = 'y';
bunsyou[7] = 'e';
bunsyou[8] = 0;

「strcpy()」という便利な命令を使えば一気に変更する事もできます。

strcpy(bunsyou,"thank you");

同じように「sprintf()」という命令もあります。

sprintf(bunsyou,"%s","thank you");

使う時は先頭に

#define _CRT_SECURE_NO_WARNINGS

#include <string.h>

こちらの2つが必要です。

何度も言いますが最初の文字数をオーバーしてはならないので注意しましょう!

もううんざりだっ!

このへんでちょっと感じてきたかもしれません。

「文字数がどうしたとか、ひらがなの場合はとか、なんかいろいろとめんどくさいかも・・・。」

そうなんです!

ちょっとぶっちゃけると、C言語は文章を扱うのには向いてない言語なのです!

最近流行っている言語なんかと比べると一番向いてないかもしれません。

なのでこのへんの事を解明しようとすると日がくれてしまうのでここは適当に流しておいて、また必要な時にでも確認しにくれば大丈夫だと思います!

次回はいよいよ自分で簡単な命令を作っていきます。

次回

最終日 関数(かんすう)!

□ページの先頭へ□

□目次へ戻る□

□HOME□

広告

↓2017年06月16日発売↓

やさしいC 第5版 (「やさしい」シリーズ)

新品価格
¥2,700から
(2017/5/1 13:05時点)

↓2014年08月09日発売↓

新・明解C言語 入門編 (明解シリーズ)

新品価格
¥2,484から
(2017/5/1 13:08時点)

↓2016年02月20日発売↓

新・解きながら学ぶC言語

新品価格
¥2,160から
(2017/5/1 13:10時点)

↓2017年02月11日発売↓

C言語プログラミング基本例題88 88

新品価格
¥3,024から
(2017/5/1 13:12時点)

↓2016年12月15日発売↓

Cの絵本 第2版 C言語が好きになる新しい9つの扉

新品価格
¥1,490から
(2017/5/1 13:13時点)

↓2017年02月08日発売↓

新・明解C言語で学ぶアルゴリズムとデータ構造 (明解シリーズ)

新品価格
¥2,700から
(2017/5/1 13:15時点)