No.4ベストアンサー
- 回答日時:
直接の回答ではありませんが、KOH_daさんのプログラム例だとまずい点があるので、念のため指摘しときます。
数値の入れ替えの方はそのままでもいいんですが、文字列の方は必ずしも文字列の記憶領域が十分確保されているとは限りませんから、単にポインタを入れ替えるにとどめるか、もしくはきちんとmalloc/freeしないとだめですよね。
なので、前者(ポインタをただ入れ替えるだけ)なら、
if( strcmp( a[i], a[j] ) > 0 ) {
w = a[i];
a[i] = a[j];
a[j] = w;
}
でしょうし、また後者(完全にmalloc/freeしなおす)なら
if( strcmp( a[i], a[j] ) > 0 ) {
w = malloc( strlen( a[i] ) + 1 );
strcpy( w, a[i] );
realloc( a[i], strlen( a[j] ) + 1 );
strcpy( a[i], a[j] );
realloc( a[j], strlen( w ) + 1 );
strcpy( a[j], w );
free( w );
}
と書かないと、最悪の場合配列の他の部分の文字列が破壊されるなど大変なことになります。
しかも後者の場合だと、今回はあえて省略しましたが、malloc/reallocに失敗した場合のエラー処理まで考えると処理が非常に重くなります。
なので、前者のような書き方がベストでは、と思いますが。
No.3
- 回答日時:
答えじゃなくて、問題の意味を聞かれても推測でしか答えられません。
たぶん文字を並べ替えるというのは、
文字列を並べ替えるという意味だと思います。
名前を五十音順にするとか...。
で、方法が違うというのはこういうことじゃないかな。
数字の並べ替えだと...
if( a[i] < a[j] ) {
w = a[i];
a[i] = a[j];
a[j] = w;
}
というように並べ替えることができます。
しかし文字列だとそのまま比較することができませんし、
代入にも専用の関数が必要になります。
if( strcmp(a[i], a[j]) > 0 ) {
strcpy( w, a[i] );
strcpy( a[i], a[j] );
strcpy( a[j], w ) ;
}
No.2
- 回答日時:
正確には「文字を並べ替える」ではなく、「文字列を辞書順に並べる」と表現すると意味が通じると思います。
基本的には数値同士の比較であれば、単純にif文等で比較してやればいいんですが、文字列同士の比較の場合はstrcmp関数を使うのが普通です。
ただし、strcmp関数はあくまで8bitコード(半角英数字、半角カナ)の文字列で利用されることを前提としているため、漢字混じり文字列(つまりマルチバイトコード)の場合はwcscmp関数などを使う必要があります。
また漢字を扱う場合はそのコード体系(JIS、Shift-JIS、EUC)の違いにも注意する必要があり、特に比較や並べ替えを行う場合は事前に漢字コードを何らかの形で統一しておかないと、訳の分からない結果がでてくる原因につながります。
今制作中というプログラムが具体的にどこまでの処理を予定しているのかがわからないのでこれ以上の回答は難しいですが…。
No.1
- 回答日時:
ここで並べ替えとは、どういう処理をさしているのでしょうか?
ソーティング(整列)ですか?そうだと仮定して…
「方法が違うとのこと」とされていますが、整列そのものの原理は、
対象が何であれ変わるわけではありません。数値と文字列(文字で
はなくて文字列ですよね?)で違うのは、代入するのに = を使う
か strcpy 等を使うかの違いと、比較するのに <, =, > を使うか、
strcmp 等を使うかの違いです。もっとも、文字列の比較の場合、
何を大きいとするかは目的によって違いますので、特殊な順序にし
たいなら新たに関数を用意しなければいけません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excel>マクロ>特定のセルで同じ情報が登録されている行を1行にまとめたい(文字連結) 6 2023/01/05 16:30
- Excel(エクセル) Excelで漢字人名が勝手に並び変わる(続) 4 2023/03/21 21:28
- Excel(エクセル) [並べ替えの前に]、[選択範囲を拡張する]のが煩わしいッ! 1 2023/02/28 22:40
- Excel(エクセル) Excelのソート(並べ替え) 2 2022/05/15 22:54
- その他(Microsoft Office) エクセルで串刺ししたシートの並べ替えをしたいです 4 2023/02/14 11:59
- Excel(エクセル) Excel 郵便番号順に並び変えたい 同じ番号が複数あるとき 4 2022/04/28 18:35
- 英語 英語が苦手なので中学英語から復習してますが、英語の並べ替え問題なら解ける問題多いのですが、この日本語 2 2023/04/01 16:27
- Excel(エクセル) Excelの並び替え(先頭の文字以外を基準に並び替えたい) 3 2023/07/07 22:21
- その他(Microsoft Office) 逆順 3 2023/08/24 09:30
- Excel(エクセル) Googleスプレッドシートの割合の関数と円グラフの並べ替えについて 1 2022/07/22 17:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
文字列からタブコードを取り除...
-
エクセル 数値データを桁をそ...
-
エクセルで文字列をtxtファイル...
-
同一セル内に関数と文字列を同...
-
Excelで3E8を3.00E+8にしない方...
-
VBの「As String * 128」とは?
-
Msgboxの×が押されたとき
-
エクセルで文字列の最大値を抽...
-
textboxユーザーコントロールの...
-
GASに文字列として関数を入れる...
-
SQL の Update文(?) と ...
-
MS SQLServer のSQLで文字列の...
-
C言語の勉強しています。すみま...
-
【Excel VBA】複数ある特定の文...
-
【excel】複数のセルを対象に特...
-
sedなどで、特定の文字列の後の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
Excelで3E8を3.00E+8にしない方...
-
VBAでの Replace関数で、ワイル...
-
Excelで指数表現しないようにす...
-
MS SQLServer のSQLで文字列の...
-
エクセルで文字列の最大値を抽...
-
エクセル 数値データを桁をそ...
-
sedなどで、特定の文字列の後の...
-
エクセルで文字列をtxtファイル...
-
VBA2005 16進を2桁で表示したい。
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
“丸(〇/○/◯)”に似た文字…
-
VBの「As String * 128」とは?
-
【Excel VBA】複数ある特定の文...
-
【excel】複数のセルを対象に特...
-
ORCLEでの小数の表示方法の変更...
-
aaa.bbb.ccc という、「ドット...
おすすめ情報