Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー

半角文字と全角文字の判別の仕方

MFCです。 テキストファイルから読み込んだ文字を一定の文字数づつウィンドウに書き込もうとしています。 例えば10文字を一行として 10文字 10文字 10文字 ・ ・ ・ という感じで表示したいのですが、テキストファイルには半角文字と全角文字が混じっています。半角だけなら10バイトごとに表示すればいいと思いますが、半角も全角も一文字としてカウントしようとすると半角か全角かを判別してからカウントしなければならないと思うのですが、何か良い方法ありませんか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

テキストファイル文字コードはSJISですよね? ちょっと変則ですが buf に該当の文字列が入っているとして SJIS->UNICODE 変換してやれば「何文字」か簡単にわかりますよ。 ユニコードには半角という概念ないので全ての文字が1文字です。 詳細は mbstowcs() 関数をあたってください。 char buf[100]; setlocale(LC_ALL, "Japanese"); int length = mbstowcs(NULL, buf, 0);

_comcom
質問者

お礼

ありがとうございます。 そういうやり方もあったんですね。 なんとかできそうです。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • abayama
  • ベストアンサー率48% (38/79)
回答No.1

試したことはありませんが、isleadbyteをこんな感じで使えばよいのでは。 l = 0; while ((c = fgetc(fp)) != EOF && l < 10) { putchar(c); if (isleadbyte(c)) { if (fgetc(fp) != EOF) { putchar(c); } } l++; }

参考URL:
http://msdn.microsoft.com/library/en-us/vccore98/html/_crt_byte_classification.asp
_comcom
質問者

お礼

ありがとうございます。 非常に参考になりました。

すると、全ての回答が全文表示されます。

関連するQ&A