2012-04-19 24 views
1

ファイルの文字を置き換えるコマンドを書き込もうとしています。たとえば、 ./replace E XY hello.txt [b] hello.txt [/ b]には[b] HELLO WORLD [/ b]という単語が含まれています。文字EはXYに置き換えられます。 したがって、HELLO WORLDHXYLLO WORLDになります。 は私は言いたい[100]バッファとargvエラーの比較

0 1 2 3 4 5 6 7 8 9 10 
[H]-[E]-[L]-[L]-[O]-[]-[W]-[O]-[R]-[L]-[D] 

チャーBUFへファイルを読んだ:

XはBUFこの場合の具体的な緩衝要素(ある
If buf[x] == argv[1], 
then buf[x] = argv[2] 

[ 1] == argv [1])。

私はこのエラーが発生しています:割り当てはキャストなしの整数です。

どのようにバッファ内の要素を引数ベクトルと比較できますか?

あなただけのあなただけの今のポインタを比較しているC.で道の文字列を比較することはできません:あなたは(おそらくエラーメッセージを与えているようだ)Cを使っていると仮定すると、

+2

プログラミング言語? –

+0

タイプの問題に対処するために構文を修正することはできますが、アルゴリズムは非常に不完全です。引数を繰り返し処理し、argv:(buf [x] == argv [1] [n])に別の添え字を追加する必要があります。 –

答えて

0

。 これを行うには、WAN:

if (! strcmp(buf, argv)) { 
    // strings are equal 
} 

あなたはC string handling上に読みたいかもしれません。

+0

しかし、問題は私がXYと置き換えようとしていることです。しかし、「私は1つの要素しか占めていません。 – bos1234

+0

はい。インプレース置換よりも少しだけ作業が必要になります。文字列を新しいバッファにコピーし、コピー中に置き換えたいパターンをスキャンしてみてください。 –

0

説明したように文字列を置き換えるプログラムが必要な場合は、streplaceを試してみてください。

あなたはこれを実装したい場合は、文字列処理は、あなたがCを使用する必要がある場合、あなたは「strcmpのような関数を(使用する必要がC.

に比べてはるかに簡単であるところのJava、C++やPythonのような言語を使用して、それを試してみてください) '、' strcpy() '、' memcpy() 'または' memmove() 'のようなものです。ヒント:char buf[100]はファイル全体を読むのに良い選択ではないかもしれません。

コメント後に編集: あなたのコンセプトとデザインを考えてください。これは大丈夫ではありません。例:現在のソリューションでは、1つの '読み取り'ブロックで開始と一致し、次のブロックで終了します。

また、あなたの現在のプログラムにはいくつかの問題があります:IMHOプログラムの残りの部分を混乱させる閉じ括弧をスキップする40行目のコメントを閉じるのを忘れてしまいました。

お願い:入力する前に考えてください!まずデザインを作って書き留めてください。

また、お願いします。元の回答(特に文字列機能を持つ部分)を読み、理解してください。あなたのプログラムを適応させる。

+0

これはこれまでのコードです。エラーは37行目にありますhttp://codepad.org/qVZtTDZt – bos1234

関連する問題