OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

全角日本語について

  • 困ってます
  • 質問No.112720
  • 閲覧数303
  • ありがとう数7
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 79% (107/134)

 全角日本語はchar型を2つ連続で続けて出力しないといけませんよね。半角だと1バイトですむところを2バイト使っているわけですけど。半角と全角が入り混じったテキストから的確に1文字ずつ取り出すことは出来ないのでしょうか?(2バイトずつ取り出すと、半角のところで文字化けになってしまいますし、1バイトずつだと全角のところが文字ばけしますよね。)半角の時は、半角を、全角の時は全角をという風に。。。

 あと、全角の日本語を一文字として扱う型は何かないでしょうか。いつも、charの配列でchar[0],char[1]として使っているのですが。

ちなみに、windows98でBorlandのTurbo C++を使って、C言語で書いています。

なにとぞ、よろしくおねがいします。
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル7

ベストアンサー率 44% (11/25)

混在文字列の処理は確かに面倒と言えば面倒ですが、私は以下のように処理していました。(最近、プログラムを作っていないので・・・)

 1.配列より取り出した1バイトを半角文字かどうか判断する。
   ライブラリのisascii()等を使用する。この辺りはコンパイラによる
   ところがありますので注意して下さい。

 2.1バイト文字であればそのまま出力し、そうでなければ該当の1バイト
   とその次の1バイトを出力する。

こう言った場合は、面倒ですが1バイトずつ判断して処理するしかないと思います。混在文字列の文字を1文字として扱いたいのであればUNICODEとかで扱えば可能だと思いますが、これは経験がないのであくまで参考として下さい。

上記はあくまで、表示可能な文字列のみの配列の扱いですので、制御コードとか全角でも表示できないコードとかは考慮していません。
お礼コメント
Nickee

お礼率 79% (107/134)

やはり、1バイトずつ判断するしかないのですね。挑戦してみます。
投稿日時 - 2001-08-03 21:51:52
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.2
レベル12

ベストアンサー率 41% (324/772)

TurboC++であるかどうかは不明ですが、 「wchar_t」で代用できませんか? ...続きを読む
TurboC++であるかどうかは不明ですが、
「wchar_t」で代用できませんか?
お礼コメント
Nickee

お礼率 79% (107/134)

wchar_tがありました。参考にさせてもらいます。
ありがとうございました。
投稿日時 - 2001-08-03 21:53:07
  • 回答No.3

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

お礼率 79% (107/134)

 はい、シフトJISです。参考にさせてもらいます。
ありがとうございました。
投稿日時 - 2001-08-03 21:55:56
  • 回答No.4
レベル11

ベストアンサー率 58% (114/195)

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

可能であればUTF-16などの文字種(表現に使うバイト数が変化しないようなコード体系)に変換して扱えばよいと思います。
お礼コメント
Nickee

お礼率 79% (107/134)

>可能であればUTF-16などの文字種(表現に使うバイト数が変化しないようなコード体系)に変換して扱えばよい

コード変換はどのようにするか今のところわかりませんが、がんばってみます。
ありがとうございました。
投稿日時 - 2001-08-03 21:57:43
  • 回答No.5
レベル9

ベストアンサー率 19% (15/78)

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

お礼率 79% (107/134)

 UNICODEってものを使ってみます。
ありがとうございました。
投稿日時 - 2001-08-03 21:59:20
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ