No.4ベストアンサー
- 回答日時:
a1b12c6
a15b6
a1b12c3
a1b2...z26
こんな状況でしょうか。
ソートアルゴリズムを選択するときの基本は「データ数」と「キーの性質」、「未ソート状態のデータ並び」を把握することです。
場合によっては「第1キー~第nキーを使って全データを対象に一気にソートする」ことが正しい場合もあります。
ことによると「上位キーが同一値であったデータだけを対象として再帰的に部分ソートを繰り返す」ことが最良の場合があります。
No.3
- 回答日時:
こういう「ちょっとややこしいデータ構成」にぶつかった場合は「データ構造の一般化」を試みます。
この場合、『数字以外の文字列』と『数字列』が連結されており、全体が'\0'で終結している文字列です。
と、言うことは2つの部分を分割すれば話は単純になります。
1.数字以外の文字列
2.数字列を数値化したもの
より簡単にするには構造体で置き換えた方が良いでしょう。
文字列から数字列の先頭を取り出すにはstrpbrk()を使うと簡単です。
char *strpbrk(char *str, char *accept);
対象の文字列をstrに、探すべき文字の集合(この場合'0'~'9')をacceptに指定します。
戻り値はacceptにある文字が見つかった最初のアドレスまたはNULL(見つからなかった)です。
だから、
#define ACCEPT "0123456789"
struct TAG {
char str[文字列の最大長+1];
int val ;
} tabl[データ数] ;/* <-ソート対象のテーブル */
char *pp ;
この状態でループして
strcpy(table[ii].str, data[ii]) ;
if ((pp = strpbrk(table[ii].str, ACCEPT)) == NULL) {
/* 数字無し */
table[ii].val = 0 ;
} else {
/* 数字あり */
table[ii].val = atoi(pp) ;
*pp = '\0' ;
}
を実行すれば『文字列』と『数値』に分割された配列にソート対象データが収容されます。
(元データが必要であればtable内に元データへのポインタを置いておきます)
table内で『文字列』と『数値』が分離しているのでソート処理自体は2つのキーによるソート処理を行えばいいだけです。
aの部分の仕様が不明だったので汎用的に考えましたが、固定で'a'が入っているのなら単純に無視するtakebouさんの回答が最適でしょう。
この回答への補足
数字文字列が複数存在して、その数も任意であるとすると、
最大の分割数のキーでソートすれば良いという考えであってます
でしょうか?
No.2
- 回答日時:
すべてのデータのaの部分が一緒なのであれば、
aを切り離して数字部分をint型に変換すれば良いでしょう。
ちなみに文字列をint型に変える関数はatoi()です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 結合セルのソートについて 5 2022/04/22 11:57
- Excel(エクセル) Excelの50音順ソートを全ての行列に適用するには? 4 2022/12/05 11:28
- JavaScript jsonテキストデータの並び替えができるサービスを教えてください 2 2022/08/05 20:16
- Visual Basic(VBA) Excel VBAで並べ替えをしたい 3 2023/02/25 09:31
- その他(プログラミング・Web制作) sortの優先キーについて(スプレッドシート) 1 2023/01/17 17:59
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Excel(エクセル) Excelのソート(並べ替え) 2 2022/05/15 22:54
- Excel(エクセル) Excel 効率的な名簿と得点の管理の仕方 8 2022/08/07 08:15
- Java Java配列の問題を教えてください。 乱数で20個出力し、最大、最小、合計、平均を求め、更に昇順にソ 3 2023/07/10 18:32
- Oracle Oracleですがsqlで質問です。 サブクエリ内で番号というカラムで昇順の1レコード目を取得したい 3 2023/05/22 10:02
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DataGridViewの複数列を連動し...
-
System.IO.Directory.GetFiles...
-
C言語でアナグラムを求めるプロ...
-
C# DataGridView のヘッダーセ...
-
C言語・要素除去
-
PHPでファイル一覧を取得して開...
-
C# DataTableの行をソートしてD...
-
あるディレクトリ内のファイル...
-
Excelですべての組合せ(重複組...
-
VB.NETでファイル名順にファイ...
-
VBA基本構文の作り方 2列の...
-
(VBA) Dir 関数で取得するファ...
-
C++ 入力した3つのint型の整数...
-
構造体のソートに関して
-
C言語のCSV形式からのソート
-
挿入ソートとマージソートを比...
-
vbでDataTableの抽出コピー
-
ファイル名「1.jpg ~10.jpg~...
-
配列の問題
-
2次元配列を複数項目でソートし...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C# DataGridView のヘッダーセ...
-
System.IO.Directory.GetFiles...
-
C言語・要素除去
-
VBA基本構文の作り方 2列の...
-
C# DataTableの行をソートしてD...
-
VB.NETでファイル名順にファイ...
-
C言語について
-
ファイル名「1.jpg ~10.jpg~...
-
vbでDataTableの抽出コピー
-
リスト構造のソートで悩んでま...
-
2次元配列を複数項目でソートし...
-
VB6でデータを昇順に並べ替える
-
DataGridViewの昇順降順。
-
あるディレクトリ内のファイル...
-
DataGridViewのソートを止めたい
-
Excelですべての組合せ(重複組...
-
DataGridViewの複数列を連動し...
-
配列の問題
-
プログラミングについて 配列を...
-
10個の整数を入力して小さい順...
おすすめ情報