• ベストアンサー

C言語の文字列について教えてください。

2つの文字列を入力後、それらを比較して、前者の文字列の中から後者の文字列に該当する箇所を削除するコードはどうなるのでしょうか? たとえば、前者の文字列が"abacbat"で、後者の文字列が"bac"だった場合、前者の"bac"の部分が削除されて、"abat"と出力されるようにしたいのです。

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

  • ベストアンサー
  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.2

自分で「手」でやるときはどういう風にやるか考えましょう。 手元に「a」「b」「a」「c」「b」「a」「t」と「b」「a」「c」と書いた紙切れを用意して、手で実際にやってみます。 そのときの動きをそのままコーディングすると、出来上がるはずです。 但し、 ・該当文字列が無かった場合 ・該当文字列が2回以上現れる場合 については何も書かれていないので、フラグを使うとか工夫が必要ですけど。 たとえでやると、 abatbacbat-bac ・出力用のエリアを準備します。 ・最初の文字を対象文字列(1)と比べます。 ・違うのでそのカードを出力エリアに並べます。 ・次の文字を対象文字列(1)と比べます。  ・同じなのでその次の文字と対象文字列(2)を比べます。   ・またおなじなのでその次の文字と対象文字列(3)と比べます。 ・違ったので、出力エリアに3文字分並べます。 ・次の文字を対象文字列(1)と比べます。  ・同じなのでその次の文字と対象文字列(2)を比べます。   ・またおなじなのでその次の文字と対象文字列(3)と比べます。   ・3文字ともおなじなので、出力エリアには文字を出さず次へ行きます。 ・次の文字を対象文字列(1)と比べます。  ・同じなのでその次の文字と対象文字列(2)を比べます。   ・またおなじなのでその次の文字と対象文字列(3)と比べます。 ・違ったので、出力エリアに3文字分並べます。 ・次の文字は終了文字なので終了。 の様に手でやると思いますが、コーディングするときどこをループにするか等考えましょう。 ※ 実際は、関数を使って一気に処理しますけどね…。 ※ アルゴリズムの問題だと思ったので、こういう回答にしました。

ytytowngogo
質問者

お礼

1つずつ文字を入力していき、実際にやってみました。 なんとなくですが、構造をつかめてきました。 もう少しやってみることにします。

その他の回答 (2)

回答No.3

strstr という関数を使えば、多少楽かも。

  • hrsmmhr
  • ベストアンサー率36% (173/477)
回答No.1

前の文字列を先頭から一つづつポインタを移動させて 後の文字列とmemcmpで一致しているか判定して 一致するポインタを記録していって いくつかある候補でどれを削除するかを決めて削除

関連するQ&A

専門家に質問してみよう