C初級:全角文字列を縦に表示する

C言語初級カテゴリのロゴ画像 C言語初級

キーボードから入力した全角文字列をコンソール画面上で縦に表示するというプログラムです。
何の役に立つのかは分かりません。

考え方

全角文字を1文字ずつ分解できれば、全角1文字+改行を表示することで縦表示ができる。

全角1文字をchar型配列に代入するイメージ
C初級:全角文字列を縦に表示する

全角文字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[2] = ‘\0’;

この全角1文字が代入された文字配列bufに改行を追加して縦表示をしています。

printf(“%s\n”, buf);

文字列の終わりまで繰り返せば全体を縦に表示できます。

コメント

タイトルとURLをコピーしました