2011-01-28 45 views
1

を別のプログラムで書くと、txtファイルを読み込み、すべての文字とスペースを\ 0としてchar配列に格納し、それ以外は無視します。この部分は動作します。C:読み込み入力文字列を読み込み、文字配列

ここで私がする必要があるのは、ユーザーが入力した文字列を読み取って、配列内のその文字列を検索し、表示されるたびに単語を印刷することです。私はCのI/Oで恐ろしいですが、文字列を読み込んで文字配列でそれを見つける方法はありますか?同様にchar配列として文字列を入力したユーザに読み取ら

答えて

2
#include <stdio.h> 
... 

char str [80]; 
printf ("Enter your word: "); 
scanf ("%s",str); 

char* pch=strstr(fileData,str); 
while (pch!=NULL) 
{ 
printf ("found at %d\n",pch-fileData+1); 
pch=strstr(pch+1,str); 
} 
+2

正しいトラックにいるため+1。最初のスペースを入力文字列の終わりと見なしたい場合は、scanfの "%s"形式が適しています。行全体が必要な場合は "%[^ \ n]"が必要です。次に、ala '("%。* s "、sizeof str、str)'を置くことによって、80文字を超えないようにする必要があります。そして、部分文字列を見つけるためにstrchr()ではなくstrstr()を使うべきです。 –

+0

@トニーありがとう。非常に良い指針。 – bioffe

+0

はfileDataの配列名ですか? – mikecavs

0
  1. (原因列がCでとにかく*基本的にチャーである)

  2. ボイヤー - ムーア又はKnutt-ような文字列照合アルゴリズムを使用Morris-Pratt(KMPとして広く知られています) - これらのC実装が好きな人は、googleを使ってください。文字列を検索して部分文字列やパターンマッチなどの文字列を探し出す方法はきちんとしています。

  3. これらの各インデックスの場合は、単語が見つかった位置を印刷できますか?または必要に応じて、発生回数を指定します。

一般的に、C文字列関数のリストは、たとえば、要件に応じて、フォーマットのstr *またはSTRN *のものであり、hereを発見しました。

+0

1.基本的に彼の要求が繰り返されています。 2.初心者のための過度なものです - strstrの何が問題なのですか? –

+0

私は彼がすでにやったことを言った後、彼の第2段落を繰り返しています。「今、私がする必要があるのは...」という部分です。それ以前に何も繰り返さなかったのです。また、私はすべてのケースを処理し、すべての可能性のあるマッチを見つけるより完全なソリューションを提案していました。最後に、str *で始まるすべてのC文字列関数の単純な代替を提供しました。 – evandrix

0

for-loopはfor-loopの中にもう1つfor-loop(入れ子になったループと呼ばれます)です。配列内のすべての文字を調べ、各文字について入力文字列のすべての文字を調べ、配列のその部分が入力文字列と一致するかどうかを調べます。表示されている場合は、印刷してください。

関連する問題