キーボードから入力した全角文字列をコンソール画面上で縦に表示するというプログラムです。
何の役に立つのかは分かりません。
考え方
全角文字を1文字ずつ分解できれば、全角1文字+改行を表示することで縦表示ができる。
全角1文字をchar型配列に代入するイメージ
全角文字1文字をchar型配列に代入する場合、文字列の終わりを表すヌル文字を考慮するとchar型配列3要素分が必要である
全角文字は、char型2文字分で1つの文字コードを表しているため、
#include <stdio.h> int main(void) { char moji[] = "あ"; printf("%c\n", moji[0]); /* 「あ」の文字コードの前半 */ printf("%c\n", moji[1]); /* 「あ」の文字コードの後半 */ return 0; }
のように半角1文字ずつ出力してしまうと変な表示になってしまいます。
しかし、%sで文字列として全て出力すると問題なく表示されます。
#include <stdio.h> int main(void) { char moji[] = "あ"; printf("%s\n", moji); /* 文字列全体を出力 */ return 0; }
実行結果
あ
これを利用して、キーボードから入力したchar型全角文字列を全角1文字につき半角3文字分(最後にヌル文字が代入されるため2バイト+1バイト=3バイト=3文字となる)に分割して表示すれば縦に表示することが出来ます。
実際の例です。
zenkaku_tate.c
/* zenkaku_tate.c: 全角文字列を縦に表示する */ #include <stdio.h> int main(void) { char str[256]; char buf[3]; int i; printf("? "); scanf("%s", str); for(i=0; str[i] != '\0'; i+=2){ buf[0] = str[i]; buf[1] = str[i+1]; buf[2] = '\0'; printf("%s\n", buf); } return 0; }
実行例
? おっす!おら悟空。 [Enter]
お
っ
す
!
お
ら
悟
空
。
解説
全角1文字が2文字分のため、キーボードから入力した文字配列strを2文字ずつ頭出ししています。
for(i=0; str[i] != ‘\0’; i+=2){
次に全角1文字を保存するための3バイトの文字配列bufに全角の文字データを保存し
buf[0] = str[i];
buf[1] = str[i+1];
buf[1] = str[i+1];
最後にヌル文字を代入しています。
buf[2] = ‘\0’;
この全角1文字が代入された文字配列bufに改行を追加して縦表示をしています。
printf(“%s\n”, buf);
文字列の終わりまで繰り返せば全体を縦に表示できます。
コメント