char型の配列に文字列データnekoを格納しnekoをコマンドプロンプト画面にcout出力表示してみよう そう文字列なんです


てんC「今まで


1文字ずつ文字データをchar型の配列内に生成された配列変数にとりこんできました。


そして


配列変数に格納された1文字の文字データを


coutを使いコマンドプロンプト画面に


cout出力表示してきました


以下のプログラムのようにですね。👇


#include <iostream>


using namespace std;


int main() {


char hairetu[4] = { 'n','e','k','o' };



cout << hairetu[0] << "\n";

cout << hairetu[1] << "\n";

cout << hairetu[2] << "\n";

cout << hairetu[3] << "\n";


return 0;


}


プログラムの実行結果


n

e

k

o


てんC「配列変数に1文字ずつ文字データを格納して


1文字ずつ文字を


cout出力表示できるなら


1文字だけでなく


文字列データ


neko, tumbalin,suika,


などを


配列に格納し


そのまま


文字列データ


neko, tumbalin,suika


をコマンドプロンプト画面に


cout出力表示してみたくなるのが


人のさがなのではありませんか?」



マックス「おにゃんこもそうです」


ソーラー 「そうだよね。


1文字だけ文字データ


'n'


を配列変数hairetu[0]


に取り込んで


cout << hairetu[0] << "\n";


を実行し


コマンドプロンプト画面に


n



cout出力表示していたら


観衆には受けるかもしれないけど


neko^^daisuki-clispy!


のような文字列データを一挙に配列にとりこんで


そのまま文字列


neko^^daisuki-clispy!


をコマンドプロンプト画面にcout表示できたら痛快だね。


そんな風に


ゲームのテキスト画面に文字列をさらさら表示した~いんだ


かっこいい~


そこで


配列をつかって


コンピュータのメモリに


文字列データを取り込み


文字列をまるごとコマンドプロンプト画面に出力表示する方法を考えていくわけなんだ。


コンピュータのメモリに文字列データを格納する・・・


配列に文字列データを格納するとは結局は


コンピュータのメモリに文字列データを格納するということだよね。


そうすることにより


ゲーム画面に文字列をcout出力表示することができるんだよね


しかし


#include <iostream>


using namespace std;


int main() {


char hairetu[4] = { 'n','e','k','o' };



cout << hairetu[0] << "\n";

cout << hairetu[1] << "\n";

cout << hairetu[2] << "\n";

cout << hairetu[3] << "\n";


return 0;


}


プログラムの実行結果


n

e

k

o


このプログラムのままでは


1文字ずつ


しかcout出力表示できないや。


なんとか


文字列nekoをまるごとcout出力表示できないかな?」


てんC


「そうですね。


今までのプログラムをみてもわかるように


#include <iostream>


using namespace std;


int main() {


char hairetu[4] = { 'n','e','k','o' };



cout << hairetu[0] << "\n";

cout << hairetu[1] << "\n";

cout << hairetu[2] << "\n";

cout << hairetu[3] << "\n";


return 0;


}


プログラムの実行結果


n

e

k

o

👆

じっとみてくださいね。



てんC「


char型の配列宣言


char hairetu[4];


によって生成される


char型の配列変数


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]


には


hairetu[0]='n';

hairetu[1]='e';

hairetu[2]='k';

hairetu[3]='o';


のように


1文字しか文字データをとりこむことができないのです。


ですので


もちろん


文字列neko


を一挙に


hairetu[0]にとりこむようなことはできないし


cout << hairetu[0] << "\n";


をもちいて


文字列nekoをまるごとコマンドプロンプト画面にcout出力表示することもできません。


そこで文字列nekoをまるごとコマンドプロンプト画面にcout出力表示するには!


どうしたらいいのでしょうか?


いままでみてきたように


char型の変数宣言


char a;


の変数a



char型の配列宣言


char hairetu[5];


によって生成された


char型の配列変数


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


には


半角英数字1文字だけ格納することができました


そのさい


半角英数字を


' 'シングルクオーテーションで囲って配列変数に取り込んできました。


では、では、1文字だけでなく


文字列nekoを配列に


とりこんでまるごと文字列nekoをコマンドプロンプト画面にcout出力表示してみましょう。



その場合は次のようにプログラムを構成します



#include <iostream>


using namespace std;


int main() {


char hairetu[5];


hairetu[0] = 'n';

hairetu[1] = 'e';

hairetu[2] = 'k';

hairetu[3] = 'o';

hairetu[4] = '\0';//(👈ここポイントですの)



cout<<hairetu[0]<<"\n";

cout<< hairetu[1]<<"\n";

cout<< hairetu[2]<<"\n";

cout << hairetu[3] << "\n";

cout<< hairetu<<"\n";//(👈ここポイントですの)


return 0;


}


プログラムの実行結果


n

e

k

o

(空白)

neko


てんC


「このプログラムでは配列変数に文字データを格納する際


hairetu[0]='n';

hairetu[1]='e';

hairetu[2]='k';

hairetu[3]='o';

hairetu[4]='\0';


hairetu[4]にNULL文字と呼ばれる\0が格納されています。


このように


char hairetu[5];


をおこない生成される


hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]



hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]


hairetu[0]='n';

hairetu[1]='e';

hairetu[2]='k';

hairetu[3]='o';


と格納された文字データ


'n'

'e'

'k'

'o'



hairetu[4]に格納されたNULL文字と呼ばれる\0



まとめて


文字列データ"neko"と認識されます


cout<< hairetu<<"\n";//(👈ここポイントですの)


のプログラムの実行結果をみてください。


nekoとなっています。


このようにして


char型の配列hairetuにとりこんだ文字列データ"neko"を表示させるには


配列名hairetuを用いて


cout<< hairetu<<"\n";


と表記します


このように


hairetu[0]='n';

hairetu[1]='e';

hairetu[2]='k';

hairetu[3]='o';

のあとに


hairetu[4]='\0';


を記述する方法で


char型の配列hairetuに文字列データ"neko"をとりこみ


まるごと文字列nekoをcout出力表示することができるようになります。」


ソーラー「配列名hairetuをつかって


文字列nekoをコマンドプロンプト画面にcout出力表示することができるんだね。」


てんC「はい


今のプログラムでは


nekoを文字列データとコンピュータに認識させるため


4文字の文字データ


'n'

'e'

'k'

'o'


を配列変数に格納したあと


'\0'


も配列変数に格納しました。


ですので


char hairetu[5];


のように


配列の要素数を[4]でなく[5]とし


配列変数を5つ生成する必要がありました。


このように


'\0'(NULL文字)を配列変数に格納するため


一般に文字列を取り込むのに


取り込む文字列の数より、


ひとつ多くの要素数を配列宣言にかきこんで


配列変数を1つ多く生成する必要があります。


そして


'\0'は文字列nekoが


cout出力表示されるときには


\0


のように


コマンドプロンプト画面に表示されません。


うまくできていますね。


そして、この'\0'は


'\0'の前で


文字列が終わっていることをあらわしています。


ですので


次のプログラムのように文字列nekoを配列に格納するとき


配列変数に文字を取り込む途中で


'\0'を配列変数に格納すると👉」


#include <iostream>


using namespace std;


int main() {


char hairetu[5];


hairetu[0] = 'n';

hairetu[1] = 'e';

hairetu[2] = '\0';//(👈ここポイントですの)

hairetu[3] = 'k';

hairetu[4] = 'o';


cout<<hairetu[0]<<"\n";

cout<< hairetu[1]<<"\n";

cout<< hairetu[2]<<"\n";

cout << hairetu[3] << "\n";

cout << hairetu[4] << "\n";

cout<< hairetu<<"\n";


return 0;


}


ビルド実行結果


n

e

(空白)

k

o

ne


てんC「👉


プログラムの実行結果をみてもわかるように


この場合


配列hairetuには文字列nekoでなく


ナル文字\0によりneまでが文字列としてコンピュータに認識され


配列hairetuにとりこまれています。


そのため


cout<< hairetu<<"\n";では


neだけがcout出力表示されているのですね(^_-)-☆



neまでが文字列と認識されていても


配列変数に1文字ずつ格納された文字


n

e

k

o



cout<<hairetu[0]<<"\n";

cout<< hairetu[1]<<"\n";

cout << hairetu[3] << "\n";

cout << hairetu[4] << "\n";


により


ちゃんとコマンドプロンプト画面にcout出力表示されていますね。」


ソーラー


「ここで


今のプログラムの


cout<< hairetu[2]<<"\n";


に注目してほしいな。


hairetu[2]にはナル文字\0がとりこまれてるね。


それをcout出力表示すると


ビルド実行結果は


空白


空白になってるんだ


ナル文字\0は不思議だね」













  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る