- ベストアンサー
C言語 文字列中の@以外の文字を前に詰めるプログラム
- C言語で、与えられた文字列の中から「@」以外の文字を文字列の前の方に詰めるプログラムを作成するにはどうすれば良いか教えてください。
- プログラムの雛形を使って文字列の中から「@」以外の文字を前の方に詰めていく方法について説明してください。
- プログラムの一部がわからないので、文字列の中から「@」以外の文字を前の方に詰めていくためのjustify関数の中身を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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言語になる言語なので、 (このソースでは複雑なことはしてないので) もう、この件解決かと思います!。 わからない事があれば、補足書いてくれたら、 対応しますよ!。では、よいプログラムライフを!
その他の回答 (2)
- AsarKingChang
- ベストアンサー率46% (3467/7474)
使うかわかりませんが、トレースログも入れておきますね。 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=の後の数字が、質問者さんのプログラムで 追えていれば成功なので、チェックに使えますから。 それでは!
- AsarKingChang
- ベストアンサー率46% (3467/7474)
やってみたら、いがいに、むずい!って事が判明^^ 全部をソートしていいなら簡単なのですが、 順番はそのままで、前に詰めるだけ!ってのが、 面倒だったのでこちらでソース書いてみて動いたら、 再度レスしますよ。(前回の件も含め)
お礼
あれから色々試行錯誤してみて出来ました! ありがとうございました!
補足
回答ありがとうございます! それと本当に理解が悪くて申し訳ないのですが結局swapとis_atの中の部分は合っていますか?