• ベストアンサー

シフトJISのソート

C言語の勉強をしております。 環境は、WindowsXP、VC++です。 シフトJISの文字を、英語(A~Z)、数字(0~9)、ひらがな(あ~ん)でソートしたいのですg、どうすれば良いのか分かりません・・・。 ネット等で色々見てみたのですが、どなたか分かりやすくご説明していただけないでしょうか? 使用する文字も上記だけなので、それ以外が入力された場合にチェックする機能も欲しいと思っております。 以上、よろしくお願いいたします。

  • ya-cha
  • お礼率68% (184/268)

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.5

交換法でやるなら 1) forの2重ループを組む pSrc と pDst 2) 2つの構造体のnameを使って strcmpなどの比較関数で大小をチェック 3) 並べ替えが必要な場合 4) pDstをリストから排除   pDstの前の要素があるなら   pDst->prev->next を pDest->next   pDstの次の要素があるなら   pDst->next->prev を pDest->prev 5) pDestの接続を更新   pDst->next を pWork   pDst->prev を pWork->prev 6) pSrcの接続を更新   pSrcの前の要素があるなら     pSrc->prev->next を pDst   前の要素が無いなら     pTop を pDstに更新   pSrc->prevをpDst 7) pSrc を pDstに更新 8) 1)へもどって繰り返す といったコードを組めば出来ますよ

ya-cha
質問者

補足

丁寧なご説明ありがとうございます。 参考にさせていただきます。 本当にありがとうございます。

その他の回答 (4)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

その構造体の定義やサンプルのデータなどを提示してみましょう 文字列の長さの違うものはどうするとか 短いものが優先、長さに関係なく先頭からオーダー順でソート ABC,A,BB,ABD,AB,Ab をどのようにソートしたいか A,AB,ABC,ABD,Ab,BB といった具合かなど ・・・

ya-cha
質問者

補足

構造体の定義は以下の通りです。 typedef struct address { int s_flg; /* 検索フラグ */ char names[32]; /* 名前 */ char tels[32]; /* 電話番号 */ struct address *prev; /* 前へのポインタ */ struct address *next; /* 次へのポインタ */ }Address; 文字列の長さの違うものは長さに関係なくです。 >A,AB,ABC,ABD,Ab,BB >といった具合かなど ・・・ の通りにしたいと思っております。 双方向リストの構造体は、先頭アドレスのみ管理し、最後のデータのnextにはNULLを入れております。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

複数の文字列のソートなら普通に英字のみのソートと同様に出来ます 文字列内の文字の並び替えなら先頭から1バイトずつ見ていって2バイト文字か1バイト文字かを判定しながら並び替える必要があります どっちでしょうか

ya-cha
質問者

補足

ご回答ありがとうございます。 複数の文字列のソートです。 ASCIIなどの1バイト文字文字と同じように出来るとは知らなかったです・・・。 ただ、もともとの文字コードとは違う順序でソートしたい場合はどうすれば良いのでしょうか? 例)ASCIIでは、# < * < 0 < … < 9 だけど、 * < # < 0 < … < 9 したい場合など・・・。 教えていただけますでしょうか?

回答No.2

>シフトJISの文字を、英語(A~Z)、数字(0~9)、ひらがな(あ~ん)でソートしたいのです 特に深く考える必要はありません。 半角の時と同じ方法でソートできます。 「ファイル名を指定して実行」に charmap と打ってみてください。 そこでフォントを MSゴシック にすると文字コードが見れます。 たとえば全角の あ~ん までは 順番に並んでいます。 全角 あ は 0x82A0 全角 い は 0x82A2 ですので 単純に数値として比較すればOKです。 (ただし、小さい文字"ょ"や、濁点付きの文字"だ"なども含まれます) >使用する文字も上記だけなので、それ以外が入力された場合にチェックする機能 これ以外の文字をはじく場合は、 0~9、A~Z、あ~ん 以外の範囲かどうかチェックすればいいでしょう。 (上にも書きましたが、濁点付きの文字なども含まれるため、ひらがなに関しては配列に使用する文字(あ~ん)を入れておいて比較するしかないと思います) ライブラリがあるかもしれませんので、 探してみるのをお勧めします。

ya-cha
質問者

補足

ご回答ありがとうございます。 さっそく試してみたのですが、どこに文字コードが出てくるのでしょうか? あと、「ライブラリ」の意味が分かりません・・・orz

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

で、入出力部分は出来ているのでしょうか? 何かのコントロールに対する入力チャックなのか ファイルから読み込むのか 出力はコンソールへ対してなのかメッセージボックスなのか 現在お使いのコードがあるなら支障の無い範囲で公開しましょう プログラミングスタイルは何なのか WIN32SDK/MFC/STLなど VC++のバージョンは何なのか VC6/2002/2003/2005/2008 ソートするのはどのようなものか 1つの文字配列をソートするのか 文字列の配列をソートするのか 文字列の配列ならば長さによる重み付けなどをするのか

ya-cha
質問者

補足

入出力は出来ています。 テキストファイルから読み取り、双方向リストの構造体へmallocしながら格納させています。 出力はコンソールです。 「プログラミングスタイル」が何の事なのか分かりませんorz ソートするのは配列ではなく、双方向リストの構造体です。 説明不足で申し訳ございません・・・。

関連するQ&A

  • シフトJISコード

    1文字を入力して(例えばWordで) その文字のシフトJISコードを知る 方法をご存知の方、 教えてください。 私の質問例が悪いのかもしれませんが 文字->シフトJISコードを 知りたいのです。 逆は、わかるのですが・・・。

  • JISコードとシフトJISコードの違い

    僕の買った参考書には ASCIIコード・・・英数字・記号を1Bで表す。 JISコード・・・英数字・記号を1Bで表すコード体系とひらがな・漢字を2バイトで表すコード体系。 シフトJISコード・・・ASCIIの1Bコード体系とJISの2Bコード体系を合体した文字コード。 とあるのですが、JISコードとシフトJISコードの違いが分かりません。というか同じではないでしょうか?2つのコードの違いを教えてください。

  • シフトJISからUTF-8に変換

    UNIX系OSのC言語で文字列をシフトJISからUTF-8に変換する方法をご存知の方がいらっしゃいましたらご教授下さい。 なにとぞ宜しくお願いいたします。

  • 日本語(シフトJIS)について

    ブラウザで文字化けするという問題を抱えていて、現在METAタグで「シフトJIS」に固定して対応しようと考えているのですが、言語セットの「日本語(シフトJIS)」って、海外版のWindowsでも標準でインストールされているものなのでしょうか? どなたかご存知の方、お返事をお願いいたします。m(_ _)m あと、追加ですが「UNICODE(UTF-8)」の形式で保存できるエディタをご存知でしたら、教えてもらえると有難いです。 よろしくお願いいたします。

  • シフトJISとUnicodeについて

    「ひん」(濱のさんずいの代わりに月へん) という文字を表示させようとしたところ WindowsXPでは文字検索していくと表示され、Windows98等では表示されないという現象が起こりました。 よく調べてみると、両OSともUnicode表には同じコード「81CF」に この「ひん」という漢字は存在するのですが、 XPは表示されて98は表示されません。 どうすれば98でも表示できますか? また「ひん」という文字にシフトJISコードとかは登録できないのでしょうか?

  • auの絵文字のシフトJISコードの一覧

    auの絵文字のシフトJISコードの一覧 auの絵文字のシフトJISコードの一覧が、絵文字番号の順番ではなく、シフトJISコードの順番に載っているページをご存知の方いませんでしょうか? もしご存知の方がいましたらそのページを教えていただけるとありがたいのですが。 auの絵文字を外字に登録して、au携帯向けのページを作ったり、パソコンでもauの絵文字を表示できるようにしたいです。 パソコンは、WindowsXP HomeEdition SP3、日本語入力システムは、MS-IME Standard2003です。 よろしくお願いします。

  • IEにてシフト_JISに無い漢字を入力させない方法

    現在、イントラネットにて開発を行っています IEにてシフト_JIS以外の漢字が入力できるので、困っています。 禁止する方法は、何かありませんか? ※シフト_JIS以外の漢字→環境依存文字(unicode) 森鷗外のおう ※ページは、charset=Shift_JISにて指定しています

    • ベストアンサー
    • Java
  • PerlスクリプトをShift_JISにエンコードしたい

    EUCで書かれたスクリプトをShift_JISで保存しなおしたのですが、設置してみると、500エラーになりました。 構文チェックCGIにかけてみたら、 「Unrecognized character \x83 at prof.cgi line ***.」 ということで、***行目を調べてみたところ、どうも「ポイント」という文字が引っかかっている模様です。 「ポイント」という言葉を「点数」に変えてみても、「お気に入り」という文字がひっかかったりしていて、キリがありません。 EUCで書かれたスクリプトをShift_JISで使う方法について詳しく書かれたサイトや、↑のような状態を解決するための方法をご存知の方、いらっしゃいましたらよろしくお願いいたします。

  • ソートの順番を変える処理

    現在、C言語の勉強をしています。 そこで、ソートについて皆さんのお知恵を拝借させてください。 文字コードで大小を比較してソートを行うにあたり、文字コードの大小とは違う方法でソートしたい場合はどのように行えば良いでしょうか? 例えばASCIIコードで 「*」は42(0x2a)、 「#」は35(0x23)、 数字の「0」は48(0x30)なので、 1:*111 2:#222 3:333 というデータがあった場合、文字コード順だと 1:#222 2:*111 3:333 という順になってしまいます。 それを 1:*111 2:#222 3:333 という順にソートするにはどうしたら良いのでしょうか? 実装方法が全く分からず、同じような質問が無いか探してみたんですが、見当たらなくて困っています・・・。 有識者の方、どうかよろしくお願いいたします。 また、以上のデータはASCIIですが、他にもSJISの文字(ひらがなや全角英数)を使用するデータのソートも同様の処理を行いたいと思っております。もし可能でしたら、少しだけでもアドバイスをお願いいたします。

  • .NET Framework(VC++)のクラスで、intの配列をソートするメソッドありますか?

    .NET Frameworkのクラスで、intの配列をソートするものは存在しますか? ちなみにVC++になります。 唯一ソート機能があると見られるArray.Sortは、Arrayに文字列しか登録できず、数字を純粋に扱えるものがマニュアルに見当たりません。 もし、ご存知の方、お教えいただけますと幸いです。

専門家に質問してみよう