キーボードから入力した全角文字列をコンソール画面上で縦に表示するというプログラムです。
何の役に立つのかは分かりません。
考え方
全角文字を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);
文字列の終わりまで繰り返せば全体を縦に表示できます。

コメント