• 締切済み

C言語 ソートについて

プログラミング初心者です #include <stdbool.h> #include <stdio.h> void swap(char *a, char *b) { } bool is_at(char c) { } void justify(char line[], int n) { } int main(void) { char line[] = "a@b@@@c@@d@@@ef@@g"; size_t n = sizeof(line) - 1; justify(line, n); printf("%s\n", line); return 0; } 実行結果 abcdefg@@@@@@@@@@@ 上の雛形を用いてような文字列lineに含まれる@以外の文字を前に詰めていく。 ただし配列lineの要素を入れ替えること という問題なのですがいまいちよくわからないので答えを教えていただけると嬉しいです

みんなの回答

回答No.2

補足です。 >n-1までやる事 と書いたのは、バブルソートだと思ったからで、 先頭に詰めるだけなら、普通のソートなので nまで回してOKです。 バブルソートとは、 dcba -> abcd これも同時にやると思ったという、 問題文の解釈ミスという意味になります。 全部を「小さい順」アルファベットにも順番があるので。 それもやるなら、バブルソートですが、 そんな条件はないので、これは不要です。

回答No.1

void swap(char *a, char *b) { } こちらは、入れ替える関数をイメージしてるようなので、 *a = *a + *b; *b = *a - *b; *a = *a - *b; こんだけかな? bool is_at(char c) { } これもしかして、atってのが@を意味している? ってことであれば、 return (c=='@'? true:false); 後は、 void justify(char line[], int n) { } こいつで、is_atを満たさない物をswapに回す。 ってのをn-1までやる事、nまでやったら メモリオーバーフローします。 テストなどだと、解答はまずいので、 回答で止めておきますが、 上に書いたことだけ守れば簡単に解決しますよ。

関連するQ&A