No.8ベストアンサー
- 回答日時:
> strcmpだとどうしてまったく並び変わらないのでしょう?
strcmp の場合でも,まったく並び変わらないということはないと思うのですが。
状況がよく分からないのでとりあえず,
実験用に作ったコードと実行結果を載せときます。
試してみてください。
#include <stdio.h>
#include <stdlib.h>
#include <mbstring.h>
#include <string.h>
int comp(const void *x, const void *y)
{
// return _mbscmp(*(unsigned char**)x, *(unsigned char**)y);
return strcmp(*(char**)x, *(char**)y);
}
int main(int argc, char* argv[])
{
char *list[] = {
"東京", "大阪", "神奈川", "愛知", "埼玉",
};
const int n = sizeof(list) / sizeof(list[0]);
/* ソート */
qsort(list, n, sizeof(list[0]), comp);
/* 表示 */
for (int i=0 ; i<n ; i++) {
puts(list[i]);
}
return 0;
}
/* 実行結果 */
愛知
埼玉
神奈川
大阪
東京
/* 環境 */
Windows 2000 SP4, VC++ 6.0 SP5
> IMEの入力時に読みを取ることをVC++で実現するにはどうすれば良いのでしょうね?
や,だから #6 で示した URL に,
http://www.geocities.co.jp/SiliconValley-Oakland …
すぐに動かせるサンプルがあるのにぃ。
参考URL:http://www.geocities.co.jp/SiliconValley-Oakland …
回答ありがとうございます。
自作プログラムでも"東京", "大阪", "神奈川", "愛知", "埼玉", はちゃんと並び変わりました。
しかし、南、南、角、南、南だとまったく並び変わりません。
yoppiiさんのコードだと当然並び変わります。
当然のことながらcmpstrでも並び変わることが分かったので、コードのどこかがおかしいか調べてみます。
>すぐに動かせるサンプルがあるのにぃ。
すみません。ごめんなさい。あやまります。
完全に見落としていました。
No.7
- 回答日時:
Excel(2000以降) のふりがな機能も IME での入力時に読みをとってきてるみたいですね。
へぇ~。
http://www.okweb.ne.jp/kotaeru.php3?q=710444 の #5
参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=710444
No.6
- 回答日時:
以前の投稿から,Windows + VC++ での話として書きます。
マルチバイト文字列対応を謳った文字列比較関数として _mbscmp というのがあります。
試しに _mbscmp を使って,
"東京", "大阪", "神奈川", "愛知" ,"埼玉"
をシフトJISコードで昇順にソートしてみると,
"愛知", "埼玉", "神奈川", "大阪", "東京"
となります。
一見ソートされていないように見えますが,一文字目の読みが,
"アイ","サイ","シン","ダイ","トウ"
と考えれば妥当でしょう。
上記のようになるのは,
JIS 第一水準漢字に限っていえば読みの順にコードが振ってあるからです。
# 複数ある読みの中からどういう基準でその読みを選んだかは知りません。
# また,第二水準になると読みの順には並んでません。
これで使い物になるかどうかは mk1234 さん次第です。
やはり私も「住所録なら,ユーザに「読み」を入力させたらいいと思います」が。
#4 で少し書いたのですが,
ユーザーが「鈴木」という姓を入力する際に,
すずき[変換]
と入力したとします。
このとき,「すずき」という読みを取得することは可能です。
Outlook Express 6 のアドレス帳の「姓」「名」を入力する欄がこの方式です。
IME 関連の API を使います。
http://www.geocities.co.jp/SiliconValley-Oakland …
ただ,読みの難しい漢字を別の読みで入力する可能性もあるので,
読みだけを編集できるようにしておく必要があるでしょう。
No.5
- 回答日時:
どのC言語を使用しているかによって、
strcmp の日本語(正確には2バイト文字)の
処理は変わるので、お使いのコンパイラの
マニュアルなどで確認する必要があります。
日本語用に別の関数を用意されているのが
普通だと思います。
文字コードは、WindowsだとSJISという
漢字コードを使用しています。
(OSによって変わります。)
「漢字コード」なんかで検索すると順序などは
わかると思います。
ただ、文字コードでのソートはやはり使えないと
思います。どういう用途で使用するか分かりませんが、
カナを別途持つのが、常套手段だと思います。
(というか住所録ソフトには必須だと思いますが。。。)
ちなみに、エクセルでも、裏でカナを持っています。
「書式」→「ふりがな」で表示できます。
回答ありがとうございます。
環境はWIN98 VC++6.0 MFCです。
自分用のソフトなので漢字でソートしてある程度バラバラでも構わないのですが、一応ふりがなでソートすることにしました。
只、振り仮名だとちゃんとソートできているのに、漢字だとまったくソートされません。
疑問1.こんなことがあるのでしょうか?
>ちなみに、エクセルでも、裏でカナを持っています。
>「書式」→「ふりがな」で表示できます。
疑問2.これをC言語で実現したいのですが、どうすれば良いのでしょうか?
No.4
- 回答日時:
「それなり」でよければ,文字コードでソートしておけば十分でしょう。
エクセルもたぶんそうしてます。
しかし住所録なら,
ユーザに「読み」を入力させたらいいと思いますよ。
# Windows ならユーザが漢字の氏名を入力するときに,
# ユーザーが入力した読みを取得することも可能ではありますが。
# これとて完璧ではないです。
回答ありがとうございます。
文字コードでのソートはどうするのでしょう?
今はstrcmp(aaa, bbb)>0でソートしていますが、このことでしょうか?
ひらがなはソートできますが、漢字はまったくソートされませんがどうしてなのでしょう?
No.3
- 回答日時:
#2です。
WORDはよく使いますが、EXCELはほとんど使った経験がありませんので、その要領のいい使い方についての自信はありませんが、次のようにできるのではないでしょうか。なお例示では、#721671の回答に私が例示した片仮名を人名とみなし、4人の女性名をこれに追加しました。1)列Aに、上から、キャサ、キャン、キヤモ、ギア、章子、章子、英子、英子 と入力。
2)列Bに(出身地を想定)上から、アメリカ、イギリス、ロシア、中国、東京、鹿児島、宮城、鳥取 と入力。
3)列Cに、上から、きやさ、きやん、きやも、きあ、しようこ、あきこ、ひてこ、えいこ と入力。
4)列ABCを上から8行(セルの個数で24)選択して、データ→並べ替え で、「最優先されるキー」を「列C」として、OK。
5)これで、上記8人が上から五十音順にならびます。
6)列Cのみ8行を選択して、編集→削除 する。ただし、今後も「花子」などの新たな人名を追加する可能性があったら、削除でなく、この8行を「フォントの色(白)」としたほうがいいでしょう。
これでご希望は達せられませんでしょうか?
回答ありがとうございます。
私の勘違いでしたら申し訳ありませんが、
C/c++のカテゴリーということが分かって回答されていますでしょうか?
質問の意図と回答が合っていないと思うのですが。
No.2
- 回答日時:
エクセルのようにセルには漢字しか入っていないのに、プログラム上は背後でふりがなデータを持っていて?ソート出来るようにするにはどうすれば良いのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 会社・職場 20歳の社会人です。悩みがあります。私はとても漢字が苦手です。それは小さい頃からなのですがパッと言わ 5 2022/03/25 10:15
- Excel(エクセル) Excelのソート(並べ替え) 2 2022/05/15 22:54
- その他(妊娠・出産・子育て) 結婚して姓と名に同じ漢字が入りますが、姓名判断などで問題ないでしょうか? 6 2023/08/07 12:07
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- 韓国語 韓国人は漢字を読めますか 5 2022/10/07 18:33
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- 郵便・宅配 香港に住んでいる人に手紙を送りたいのですが住所は漢字の方がいいですか? それとも英語の方がいいですか 2 2023/02/12 21:05
- その他(学校・勉強) 漢字の書き順をアニメーションなしで調べられるサイトはありますか? 2 2023/03/24 01:53
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- その他(メールソフト・メールサービス) こんにちわ。教えて頂けたら幸いです、 パソコンで、 メールで送られて来た電子書類にパソコン上で、その 5 2023/07/05 10:56
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
数字以外が入力されたらエラー...
-
if文の条件にscanf関数を使うと…?
-
C言語scanf_sで何故か2回入力に...
-
Linuxで入力待ちなしkeyread関...
-
実行結果の順番がおかしいんで...
-
Eclipseコンソール表示を、リセ...
-
VB カウントダウンタイマーの作...
-
正負を反転させて出力するプロ...
-
VB.NETで16進数+16進数や16進...
-
ワードで文字を入力する時の変...
-
2進数の1の数を数える問題
-
C言語でつるかめ算をするにはど...
-
Java 6人分の得点を入力し、平...
-
getchar()について 教えてくだ...
-
入力エラーの処理について。
-
enterでループ終了
-
scanf が無視されます
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
double型が正常に認識されてい...
-
プログラミング初心者です。 Py...
-
正負を反転させて出力するプロ...
-
Excel VBAで、Application.Inpu...
-
C言語について。
-
batプログラム上で文字列を入力...
-
*をユーザーが入力した数字の数...
-
cout関数を使っているのですが...
-
漢字のソートについて
-
数字以外が入力されたらエラー...
-
Userformの入力順序をタブオー...
-
ワードで文字を入力する時の変...
-
Linuxで入力待ちなしkeyread関...
-
java初心者です。入力されたの...
-
EDITコントロールで入力できる...
-
Eclipseコンソール表示を、リセ...
-
小数か整数かを判定する方法
-
C言語scanf_sで何故か2回入力に...
-
VB.NETで16進数+16進数や16進...
-
Linuxプログラミングで、キーボ...
おすすめ情報