char szNames[] = "Hokkaido\0Saga\0Aichi\0Wakayama\0Shizuoka\0\0";
を
"Aichi\0Hokkaido\0Saga\0Shizuoka\0Wakayama\0\0"
というようにアルファベット順に並び替える C 関数を書くにはどうすればよいでしょうか?
複数の文字列を含む文字列におけるソート
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 15年前
- 住所: 東海地方
- 連絡を取る:
Re: 複数の文字列を含む文字列におけるソート
フォーラムルールをご覧頂きたいのですが、質問の書き方が良くわからない場合はテンプレートをお使いください。
http://dixq.net/board/board.html
http://dixq.net/board/board.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
-
Temp
Re: 複数の文字列を含む文字列におけるソート
int のソートは以下のコードでできました。non さんが書きました:int ten[]={6,3,5,4,2,0};
のような数字のソートは作れますか?
void sort(int numbers[], int count)
{
int i, j, temp;
for(i = 1; i < count; ++i)
{
for (j = count - 1; j >= i; --j)
{
if(numbers[j - 1] > numbers[j])
{
temp = numbers[j - 1];
numbers[j - 1] = numbers[j];
numbers[j] = temp;
}
}
}
}
Re: 複数の文字列を含む文字列におけるソート
では次に、
char *str[] = {"Hokkaido","Saga","Aichi","Wakayama","Shizuoka",""};
だとしたら、ソートできますか?
プログラムを載せるときはコードタグで囲ってね。
char *str[] = {"Hokkaido","Saga","Aichi","Wakayama","Shizuoka",""};
だとしたら、ソートできますか?
プログラムを載せるときはコードタグで囲ってね。
non
-
Temp
Re: 複数の文字列を含む文字列におけるソート
でできました。non さんが書きました:では次に、
char *str[] = {"Hokkaido","Saga","Aichi","Wakayama","Shizuoka",""};
だとしたら、ソートできますか?
プログラムを載せるときはコードタグで囲ってね。
Re: 複数の文字列を含む文字列におけるソート
それでは、次に
char szNames[] = "Hokkaido\0Saga\0Aichi\0Wakayama\0Shizuoka\0\0";
から、おのおのの文字列の先頭アドレスをみつけ、char *str[6] に格納する
プログラムを作りましょう。
なお、ここでは文字列の個数が5個までとしています。str[6]にしているのは
終わりの合図用です。
char szNames[] = "Hokkaido\0Saga\0Aichi\0Wakayama\0Shizuoka\0\0";
から、おのおのの文字列の先頭アドレスをみつけ、char *str[6] に格納する
プログラムを作りましょう。
なお、ここでは文字列の個数が5個までとしています。str[6]にしているのは
終わりの合図用です。
non
-
かずま
Re: 複数の文字列を含む文字列におけるソート
一週間以上経ちましたが、進展がないようですね。
さて、入力のサイズに応じて、必要なメモリーが増えるのが普通のアルゴリズム
ですが、どんなに時間がかかってもよいから、ごく少量のメモリだけで、目的を
達成するそんなプログラムを考えてみました。
テストプログラムは、次の通りです。
さて、入力のサイズに応じて、必要なメモリーが増えるのが普通のアルゴリズム
ですが、どんなに時間がかかってもよいから、ごく少量のメモリだけで、目的を
達成するそんなプログラムを考えてみました。
#include <string.h> // strlen, strcmp
void rev(char *s, int n)
{
int c, i;
for (i = 0; i < --n; i++) c = s[i], s[i] = s[n], s[n] = c;
}
void sort(char *s)
{
int m, n;
for (; *s; s += strlen(s) + 1)
for (m = strlen(s) + 1; (n = strlen(s + m) + 1) > 1; m += n)
if (strcmp(s, s + m) > 0)
rev(s, m), rev(s + m, n), rev(s, m + n);
}