質問: argv[1][j] ){ // trの変換先と変換元の文字が同じか判定 if( argv[1][j] != argv[2][j] ){ printf( "%c", argv[2][j] ); i++; }else{ printf( "%c", moji1[i] ); } } } if( moji1[i] != argv[1][j] ){ printf( "%c", moji1[i] ); } } } return( 0 ); } ```
回答: 自分が何をするのかをちゃんと整理しないでプログラムをいじってしまって混乱に陥っているように思います。(いじる元のプログラムもちゃんと理解していなかったのかも知れませんが) 質問のプログラムをベースにプログラムを書いてみましたが、コメント空行有りで20行でした。質問のプログラムのおよそ半分は無駄、というか間違いと言ってしまっても... 擬似言語で書くならば ``` 1文字入力して EOFでなかったら (EOFだったら終わり) 変換元の文字を探索 入力文字と変換元の文字が一致したら 変換先の文字に置き換えて 探索終わり 文字を表示 繰り返し 終わり ``` こんな感じでしょうか。 端折りましたが、 ./tr abc (パラメータが足りない) ./tr abcdef ghi (変換先の文字数が少ない) なんて場合も妙なことが起こらないように対策する必要があるでしょう。 これだけ時間を使って解決しない時は、一度真っ白な状態から作り直してみるのも一案ではないでしょうか。