有没有什么方法可以搜索“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”模式的单词
答案 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等等。