0

下線が欠落している文字を表す「tro___e」を検索する方法はありますか?

各行に7文字の単語が含まれるテキストファイルがあります。例えば

trouble
control
reached
further
helping
shatter
biggest

各単語を文字列と比較しようとしています

char check[10]="tro\0\0\0e"

現在、私は各行を読み、以下を使用して比較しています。

if(strstr(pword,check)!=NULL)
{
    fprintf(wfile,"%s\n",pword);
    }
}

fclose(file);

fclose(wfile);

wfileの現在の出力は次のとおりです。

control
trouble

これは、「tro」と「e」の間に3つの\ 0があるため、比較では単語に「tro」が含まれているだけです。

下線が欠落している文字を表す「tro___e」を検索する方法はありますか?

これは絞首刑執行人のゲーム用であるため、ファイル内の単語は必ずしも同じではなく、7文字の長さであるとは限りません。また、パターンはプレーヤーがすでに推測した文字を表すため、パターンは必ずしも「tro___e」ではありません。この場合の答え:「トラブル」

たとえば、プレーヤーが「r」、「u」、「l」を推測した場合。私は文字通りだった文字列を持っているでしょう。

char check[10]="\0r\0u\0l\0\0\0\0\0"したがって、私が望む検索は、パターン「_r_u_l」の単語を検索することです。

4

4 に答える 4

1

タグで示唆されているように、C# ソリューションに対して真にオープンである場合:

string pword = "control\r\ntrouble\r\nreached\r\nfurther\r\nhelping\r\nshatter\r\nbiggest";
System.Text.RegularExpressions.Regex re = new System.Text.RegularExpressions.Regex("tro...e");
System.Text.RegularExpressions.MatchCollection mc = re.Matches(pword);
foreach (System.Text.RegularExpressions.Match m in mc)
{
   Console.WriteLine(m.Value);
}
于 2012-02-01T12:08:46.877 に答える
0

拡張可能なソリューションが必要な場合、Posix システムには regcomp、regexec などを含む <regex.h> があります。

于 2012-02-01T13:46:54.730 に答える
0

あなたの問題が実際に何であるかは完全にはわかりませんが、次のように 2 つの検索/条件を AND で組み合わせることができると思います。 if(strstr(pword,check) != NULL && pword[6]=='e') ...

于 2012-02-01T12:09:06.647 に答える
0

いじらないでください\0- のすべての関数は、string.h文字列を終了すると考えています。を使用し_ます。

おそらく、独自の関数を作成する必要があります。何かのようなもの:

int isval(const char *word,const char *pat) {
 while (*word) {
  if (*pat!='_' && *pat!=*word) return 0;
  word++;
  pat++;
 }
 return !*pat;
}
于 2012-02-01T12:46:15.143 に答える