找到一个单词中的字母图案

时间:2012-02-01 12:00:51

标签: c fopen c99 printf strstr

有没有什么方法可以搜索“tro_ _ _e”,其中下划线表示缺少字母?

我有一个文本文件,每行有一个7个字母的单词。 e.g

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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

不要混淆\0 - string.h中的每个函数都认为它结束了字符串。使用_

你可能应该编写自己的函数。类似的东西:

int isval(const char *word,const char *pat) {
 while (*word) {
  if (*pat!='_' && *pat!=*word) return 0;
  word++;
  pat++;
 }
 return !*pat;
}

答案 3 :(得分:0)

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