• ベストアンサー

日本語を配列に収め、そして表示するには?

日本語が書かれたファイルから、その日本語をEUCコードとして配列に収めたいのですが、どうすればいいのでしょう? 英字だったらchar型の配列に入れてしまえばいいですが、char型って1バイトの入れ物ですよね。日本語は2バイト... int型に入れちゃっていいんでしょうか?…でも、今度はその配列に収めた日本語を表示するトキはどうしたらいいんでしょ??書式は%cでいいのですかね…?(EUCコードで表示するときと、他のコードで表示するトキはどうやって区別するんだろ?というのも疑問です。) よろしくお願いいたします。

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

  • ベストアンサー
  • natural
  • ベストアンサー率37% (419/1115)
回答No.1

char型でOKですよ。(^_^) 但し2バイト文字はその名の通り一文字で2バイト(char型二つ分)使いますので配列を用意するときには注意が必要です。(例えば全角10文字格納するには最低char型で21個以上の配列が必要。1個は'\0'のため。) 表示の際も%sで大丈夫です。(入力もscanf等なら%s) 但し、実行環境が日本語の入出力をサポートしている必要があります。 文字コードに関しては同じ実行環境で入力・出力共に行うのであれば意識しなくても大丈夫です。

noname#4530
質問者

お礼

回答ありがとうございました。 …すみません。ただいま混乱中です。 その混乱を解消するために、もう一つ質問を立ち上げますが、 全ての疑問が解消されたときにこの質問も閉めさせてもらう予定です。

noname#4530
質問者

補足

※お礼の欄の後記 問題解決しました。 たしかにchar型でよかったです。 まだ全ての疑問がカンペキに解決したわけではないですが、 今はまだ勉強不足というコトで、とりあえず今回はこれにて閉じさせてもらいます。

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

その他の回答 (1)

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

まず、元のファイルの文字コードが問題になりますが、 EUCコード以外のファイルなら、変換が必要になります。 また、日本語は2バイトとは限りません。 半角カナとか1バイトカナとか呼ばれる文字は, 日本語EUCでは3バイトになったはずです。 配列はint型に入れることも可能でしょうが, charとして読んだほうが通常は楽と思います。 勿論,目的や処理内容によってはintが適切なケースもありえるでしょう。 表示も環境によります。 もともとEUCが表示できる環境ならEUCでOKですが、 例えばWindows環境ならShift JISに変換する必要があります。

noname#4530
質問者

お礼

回答ありがとうございました。 …すみません。ただいま混乱中です。 その混乱を解消するために、もう一つ質問を立ち上げますが、 全ての疑問が解消されたときにこの質問も閉めさせてもらう予定です。

noname#4530
質問者

補足

※お礼の欄の後記 今回は一応問題解決しました。 まだ全ての疑問がカンペキに解決したわけではないですが、 今はまだ勉強不足というコトで、とりあえず今回はこれにて閉じさせてもらいます。

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

関連するQ&A

  • 日本語データを配列に収める方法

    日本語(漢字含む)が書かれたファイルから、データを配列に収めるにはどうしたらいいのでしょうか?(長々とかかれていますがこれが主題です。後は読まずにこの文章に対してだけ答えてくださっても結構です。) ◆fgetc()で1文字ずつchar型の配列に収めていったのですが、その配列の内容を表示してみると、カタカナと「、」からなる意味不明の文字列が表示されてしまいました。表示は、%sで表示する方法と、%cで1文字ずつをループをつかって表示する方法の2通りの方法を試してみましたが、どっちもダメでした。なぜなんでしょうか???(ちなみに英字ならうまくいくのですが…) ない頭を使って考えてみたんですが、漢字のバイト数を2バイトと仮定すると、(そうではないものもあるらしいのですが…)char型の配列の要素1個あたり1バイトなので、要素1個には、漢字の情報の半分の情報量しか含まれていないからではないか、とおもったんですが、どうでしょうか? ◆しかし、fgetc()ではなく、fgets()で収めてみると、なぜかうまく表示されます(この場合、1行分だけですが)。前出の2つの方法の両方で。なぜなのでしょうか?????????? じゃあ、その方法でヤレバいいじゃん、といわれそうですがしかし、fgets()だと1行分配列に収めた後、さらに同じ配列にデータの続きを収めることができないからです。つまり、ファイルから1行分しか配列に収められないと…まぁ、何か方法はあると思いますが、いずれにしろスマートではなくなるのでは、と思うのです。 長くなってしまって、ごめんなさい。文章が下手で…(汗汗) どこか1部分に対する回答や、アドバイスでも結構ですので、よろしくお願いします。

  • 日本語キーボードが英語配列

    Office系のソフトとIEを使用する際にキーボード配列が 英字配列になってしまい困っています。 英字⇔日本語の切換えが半角+Altになります。 キーボードのプロパティを見てみましたが 日本語 PS/2キーボード(106/109キーCtrl+英数)です。 Office系のソフトとIE以外を使用する限りは日本語配列のようです。 試しにGoogle Chromeを使いましたが、こちらでは日本語配列でした。 どなたかわかる方いませんでしょうか? よろしくお願いします。

  • 日本語配列キーボードに変えましたが、認識が英字配列のままです

    以前、英字配列のキーボードを使用していました。 本日サンワサプライSKB-SL06シリーズの日本語配列キーボードに変えました。 キーボード上に書いてある記号を押しても、出ず 英字配列のキーボードと同じ認識がされているようです。 例えば、Shift+2だと日本語配列なら「"」ですが、実際は「@」が出るなどです。 このような英字配列キーボードと日本語配列キーボードの 認識のズレを解消する方法を教えてください。 現在使用しているサンワサプライSKB-SL06シリーズはキー数が109キーです。

  • 配列について

    C++で下に示したソースコードを参考書を使って書き、文字列を出力する簡単なプログラムを作りました。 #include <iostream> using namespace std; void strout1(char ss[]); int main() { char aa[10] = "abcde"; strout1(aa); strout1("こんにちは"); return 0; } void strout1(char ss[]) { cout << ss << '\n'; } ここで char aa[10] = "abcde"; の部分のaaについて知りたいことがあります。この配列の [] の中の数字は日本語の こんにちは を表示するために 10 を入れているのでしょうか? 確か日本語は一文字2文字幅で表示するのでしたっけ? でもこのソースコートは  char aa[6] = "abcde";のように[]の中を6にしても普通のコンパイルでき、こんにちは も表示できました。5以下の数字だと error C2117: 'aa' : array bounds overflow となりエラーメッセージがでます。 ここでなぜ aa[6] なのに日本語文字の こんにちは が表示できるのでしょうか? 日本語一文字につき2ビット表示なら こんに までしか表示できないように思うのですが。 また仮に strout1("こんにちは"); の文を抜かして char aa[5] = "abcde"; のように宣言してもエラーになります。 "abcde"は5文字なので aa[5] としても良いようにおもうのですがなぜエラーになるのでしょうか?

  • 全角日本語について

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

  • C言語でcharの足し算

    char型の配列の中から数を取り出して足し算させたいです。 この配列には数字だけではなく英数字のどちらかが入るので、intではなくchar型の配列を作りました。 scanf("%c", &i); と、scan文をループさせてchar i[3]の中身を{1,1,a}と入れたとします。 このとき、i[0]+i[1]とやると、中の文字コード(?)を足してしまって98という結果が出てきてしまいます。 かといって、 scan("%d", &i);とやると、数字を入れているときはいいのですが英字を入れると「フ」という文字になってしまいます。 上手い具合に数字はコードじゃなく数字として、英字は英字のまま1つの配列の中に入れられないものでしょうか。 宜しくお願いします。

  • HHKB(英字配列)の日本語入力に関して

    ご覧いただきありがとうございます。 HHKBの英字配列を購入を検討しています。 問題として, 「会社支給PCでの使用となり、レジストリ変更,ソフトのインストール等ができません。  また、管理者権限でのログインもできません」 (PCはWindows10です.) そのような場合におきましてHHKBの英字配列でキーボードに印字されている文字のまま日本語入力はできますでしょうか。 また,キーマップ変更ツールにおきましては、通常日本語配列にしかないキー (かな切替)等は英字配列のキーボードに適応可能でしょうか。 何か、秘策をご存知の方はご教示いただけますでしょうか。 ※OKWAVEより補足:「「ScanSnap/fiシリーズ/HHKB」商品について」についての質問です。

  • 配列のディスプレイという使い方について

    先程は、ありがとうございました もうひとつ、お願い致します 「配列へのポインタ配列」 これは、配列のディスプレイという使い方についての説明です 以下がコードです int hoge1[10]; int hoge2[10]; int hoge3[10]; int *chobi[3]={hoge1,hoge2,hoge3}; まず、コードを見る限り、これは「配列のアドレスへの配列」と言えばよいのではないでしょうか 「ポインタ配列」とは、 *foo() こういうものだと認識しています (「配列へのアドレスの配列」が正しいかもしれません。容赦してください) 「配列へのポインタ配列」という表現が、全く理解できません どなたか説明お願い致します 次に、配列のアドレスを格納するのであれば char 型にするべきではないでしゅうか(アドレスは16進数なので) 最後に、使い方がわかりません 配列のアドレスを配列にして、どのように使うのでしょうか 以上、質問が多いですが、よろしくお願い致します

  • 関数から配列を返すには?

    return で配列を返すにはどうしたらよいのでしょうか。 例えば以下のような場合です。 int main (){ char Value[] = "999"; int a;  a = test(Value);  printf ("%d", a);   } int test(char *Value) { int nVal[255]; ここで nVal に適当な処理をして・・・  return Value; }  int a を配列とかにしてみましたけど、コンパイラが 通りません。 要は配列数値を main で受け取って表示したいのですが、 本日C言語はじめたところなので、教えていただければありががたいです。

  • ThinkpadUS配列@Macで日本語切り替え

    ThinkpadUS配列をMasで使いたいのですが、日本語入力と英字入力の切り替えができなくて困っています。 ここで出ているものと同じです。http://kronus9.sblo.jp/article/62243435.html PCkeyboardHackなるものを入れてみましたが、特に切り替えはできず。。。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • Mac
無線LANの再設定が出来ない
このQ&Aのポイント
  • 新しい回線に変えた際に無線LANの再設定がうまくいかない状況です。
  • パスワードの入力も正しく行いましたが、接続ができません。
  • EPSON社製品の無線LAN接続に関するトラブルの原因や解決方法について知りたいです。
回答を見る

専門家に質問してみよう