• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 ソートについて)

C言語 文字列中の@以外の文字を前に詰めるプログラム

このQ&Aのポイント
  • C言語で、与えられた文字列の中から「@」以外の文字を文字列の前の方に詰めるプログラムを作成するにはどうすれば良いか教えてください。
  • プログラムの雛形を使って文字列の中から「@」以外の文字を前の方に詰めていく方法について説明してください。
  • プログラムの一部がわからないので、文字列の中から「@」以外の文字を前の方に詰めていくためのjustify関数の中身を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

C言語にまだ変換してませんが、 <?php // これは作らなくていいです。Cの物を使えばOK function swap( &$line, $a, $b ) { $ac = substr( $line, $a, 1 ); $bc = substr( $line, $b, 1 ); if ( $a < $b ) { $s = substr( $line, 0, $a ); $c = substr( $line, $a, ( $b - $a ) - 1 ); $e = substr( $line, $b + 1 ); $line = $s . $bc . $c . $ac . $e; } } function yay( $line ) { $t = 0; for ( $i = 0; $i < strlen( $line ); $i++ ) { $c = substr( $line, $i, 1 ); if ( $c != '@' ) { swap( $line, $t, $i ); $t++; } } echo "out=".$line."\n"; } yay("@@@@abcd"); yay("abcd@@@@"); yay("a@b@c@d@"); yay("@a@b@c@d"); ?> これで、出力結果が、 out=abcd@@@@ out=abcd@@@@ out=abcd@@@@ out=abcd@@@@ と出てるので、条件判断部分を、 今作った物に置き換えれば、解答になりますね! ちと、この件遊べました!ありがとね! 頭のリフレッシュになりましたわ。 先頭の'$'取るだけで、C言語になる言語なので、 (このソースでは複雑なことはしてないので) もう、この件解決かと思います!。 わからない事があれば、補足書いてくれたら、 対応しますよ!。では、よいプログラムライフを!

MAPILONN
質問者

お礼

あれから色々試行錯誤してみて出来ました! ありがとうございました!

MAPILONN
質問者

補足

回答ありがとうございます! それと本当に理解が悪くて申し訳ないのですが結局swapとis_atの中の部分は合っていますか?

その他の回答 (2)

回答No.3

使うかわかりませんが、トレースログも入れておきますね。 pos=0/4 @/a @@@@abcd s: c:@@@ e:bcd a@@@@bcd pos=1/5 @/b a@@@@bcd s:a c:@@@ e:cd ab@@@@cd pos=2/6 @/c ab@@@@cd s:ab c:@@@ e:d abc@@@@d pos=3/7 @/d abc@@@@d s:abc c:@@@ e: abcd@@@@ out=abcd@@@@ out=abcd@@@@ pos=1/2 @/b a@b@c@d@ s:a c: e:@c@d@ ab@@c@d@ pos=2/4 @/c ab@@c@d@ s:ab c:@ e:@d@ abc@@@d@ pos=3/6 @/d abc@@@d@ s:abc c:@@ e:@ abcd@@@@ out=abcd@@@@ pos=0/1 @/a @a@b@c@d s: c: e:@b@c@d a@@b@c@d pos=1/3 @/b a@@b@c@d s:a c:@ e:@c@d ab@@@c@d pos=2/5 @/c ab@@@c@d s:ab c:@@ e:@d abc@@@@d pos=3/7 @/d abc@@@@d s:abc c:@@@ e: abcd@@@@ out=abcd@@@@ pos=の後の数字が、質問者さんのプログラムで 追えていれば成功なので、チェックに使えますから。 それでは!

回答No.1

やってみたら、いがいに、むずい!って事が判明^^ 全部をソートしていいなら簡単なのですが、 順番はそのままで、前に詰めるだけ!ってのが、 面倒だったのでこちらでソース書いてみて動いたら、 再度レスしますよ。(前回の件も含め)

関連するQ&A