1

課題に取り組んでいますが、コーディング課題に問題があることに気づきました。おそらく睡眠不足が原因で、この問題に取り組む方法は私には明らかではありませんが、とにかく. この割り当てのために、空白の char 配列をトリミングする必要があります。

私が考えた解決策には、2番目のchar配列が含まれ、空白以外のスペースをその配列にコピーするだけで完了です。しかし、その時点ではまだサイズがわからないため、サイズを知らずに char 配列を作成するにはどうすればよいですか。新しい配列にコピーする必要がある文字数を知るために、まだトリミングする必要があります。これは、割り当てによって異なります

ここstackoverflowには良い質問がたくさんあることは知っていますが、これは正しい構文ではなく、思考プロセスに関係していると思います.

私の2番目の問題は、ストリームが必要なため、char配列でfscanf/fgetcを実行する方法です.ストリームではなくポインターを与えるだけで十分ですか?

4

2 に答える 2

1

ここに1つの部分的なアイデアがあります:char配列で最初のパスを作成し、空白を数え、次に文字列の長さから2番目の配列の空白を引いたものを取り、空白をスキップしてコピーを実行できます。

配列を通過するパスを作成することもできます。

アレイの最後までテストします。

私の(現在/インデックス)位置は空白ですか?(スペース)

もしそうなら、次に利用可能な非空白の値を取得し、そこに置きます。

次にindex++

そうでない場合は、index ++

2番目はわかりませんが、いくつかのチェックを行い、そこでも良い答えが見つかるかどうかを確認します。

于 2013-02-23T03:43:24.223 に答える
1

単純にその場で変更する場合は、スペースの後にすべての文字を戻し、配列の最後まで繰り返します。これは非常に非効率的です。

新しいコピーを作成する場合は、同じ長さの新しい配列を作成してから、以前と同じように行います (スペース以外のすべての文字をコピーします)。文字もコピーする\0と、文字列の終了の問題は発生しません。これははるかに効率的です。


コメントを見ると、任意の形式で配列を入力するオプションがあるようです。後でテキスト操作を行う代わりに、必要なフォームに文字列を入力することをお勧めします。

scanforを繰り返し使用するだけfscanfで、別々の単語を同じ配列に入力できます。これにより、すべての空白が処理されます。

于 2013-02-23T03:35:14.473 に答える