• ベストアンサー

全角日本語について

 全角日本語はchar型を2つ連続で続けて出力しないといけませんよね。半角だと1バイトですむところを2バイト使っているわけですけど。半角と全角が入り混じったテキストから的確に1文字ずつ取り出すことは出来ないのでしょうか?(2バイトずつ取り出すと、半角のところで文字化けになってしまいますし、1バイトずつだと全角のところが文字ばけしますよね。)半角の時は、半角を、全角の時は全角をという風に。。。  あと、全角の日本語を一文字として扱う型は何かないでしょうか。いつも、charの配列でchar[0],char[1]として使っているのですが。 ちなみに、windows98でBorlandのTurbo C++を使って、C言語で書いています。 なにとぞ、よろしくおねがいします。

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

  • ベストアンサー
  • pikacchu
  • ベストアンサー率44% (11/25)
回答No.1

混在文字列の処理は確かに面倒と言えば面倒ですが、私は以下のように処理していました。(最近、プログラムを作っていないので・・・)  1.配列より取り出した1バイトを半角文字かどうか判断する。    ライブラリのisascii()等を使用する。この辺りはコンパイラによる    ところがありますので注意して下さい。  2.1バイト文字であればそのまま出力し、そうでなければ該当の1バイト    とその次の1バイトを出力する。 こう言った場合は、面倒ですが1バイトずつ判断して処理するしかないと思います。混在文字列の文字を1文字として扱いたいのであればUNICODEとかで扱えば可能だと思いますが、これは経験がないのであくまで参考として下さい。 上記はあくまで、表示可能な文字列のみの配列の扱いですので、制御コードとか全角でも表示できないコードとかは考慮していません。

Nickee
質問者

お礼

やはり、1バイトずつ判断するしかないのですね。挑戦してみます。

その他の回答 (4)

  • yu-ji
  • ベストアンサー率19% (15/78)
回答No.5

ShiftJISでは半角は1文字1byte、 全角は1文字2byteになっていますね。 UNICODEを使えば半角も全角もどちらも 1文字2byteで扱えますので便利ですよ。 一回お試し下さい。 それば無理なら、 やはり半角か全角かを判定してくれるマクロか何かを作成して 一文字ずつ判定していくしかないでしょうね。

Nickee
質問者

お礼

 UNICODEってものを使ってみます。 ありがとうございました。

  • alfeim
  • ベストアンサー率58% (114/195)
回答No.4

ShiftJISでは漢字は2バイト文字のため、charではサイズが足りません。 WORD型やwchar_tであればサイズは足りるでしょうが、ASCII文字やいわゆる半角カナなどの1バイトで表現される文字と混合して扱うのが難しくなります。 可能であればUTF-16などの文字種(表現に使うバイト数が変化しないようなコード体系)に変換して扱えばよいと思います。

Nickee
質問者

お礼

>可能であればUTF-16などの文字種(表現に使うバイト数が変化しないようなコード体系)に変換して扱えばよい コード変換はどのようにするか今のところわかりませんが、がんばってみます。 ありがとうございました。

noname#25358
noname#25358
回答No.3

 シフトJISですよね。  その場合は、その文字が全角かどうかは、数値の範囲によって決まっています。  参考URLのところに俺が以前使ったページを記載しておくので調べてみてください。  で、読み込んだ文字が全角なら次の文字と一緒に出力するようにすればOKのはずです。

参考URL:
http://www.hosibune.net/~mak/technical/kanji.shtml
Nickee
質問者

お礼

 はい、シフトJISです。参考にさせてもらいます。 ありがとうございました。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.2

TurboC++であるかどうかは不明ですが、 「wchar_t」で代用できませんか?

Nickee
質問者

お礼

wchar_tがありました。参考にさせてもらいます。 ありがとうございました。

関連するQ&A