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”之间有三个\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

我不完全确定您的问题实际上是什么,但我想您可以将两个搜索/条件与 AND 结合起来,例如: if(strstr(pword,check) != NULL && pword[6]=='e') ...

于 2012-02-01T12:09:06.647 回答
0

如果您需要可扩展的解决方案,Posix 系统具有 <regex.h>、regcomp、regexec 等。

于 2012-02-01T13:46:54.730 回答
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 回答