我一直在尝试编写一个程序,它只输出 n 个字母所有可能排列的现有单词,例如:
输入“eta”
输出“茶,吃,吃”
正如您所注意到的,我不想要所有其他不是单词的排列,例如“aet, tae”
为此我有一个 dictionary.txt
我已经有了一个打印所有可能排列的函数。
另一方面,我有一段代码将一个字符串与我字典的每一行进行比较,如果匹配则打印它。
我只是无法让两者一起工作
void swap(char *x, char *y)
{
char temp;
temp = *x;
*x = *y;
*y = temp;
}
void permute(char *a, int l, int r)
{
int encontrado=0;
int i;
if (l == r)
{
puts (a);
}
else
{
for (i = l; i <= r; i++)
{
swap((a+l), (a+i));
permute(a, l+1, r);
swap((a+l), (a+i)); //backtrack
}
}
}
int main()
{
char str[60];
char str_mio[] = "aet";
int encontrado=0;
int n = strlen(str_mio);
permute(str_mio, 0, n-1);
FILE *fp;
fp = fopen("English.txt" , "r");
if(fp == NULL) {
perror("Error opening file");
return(-1);
}
else{
while( fgets (str, sizeof(str_mio), fp)!=NULL && encontrado!=1) {
//puts(str);
if(!strcmp(str,str_mio)){
puts(str_mio);
encontrado=1;
}
}
}
fclose(fp);
return 0;
}
最佳答案
您的 permute()
例程通过直接调用 puts()
来输出字符串。相反,您只想在匹配时输出它。
假设您要将 main()
中的字典检查代码重构到一个新例程 printIfMatch(char *str_check)
中,其中 str_check
取代您当前在 main()
str_mio
然后您就可以从 permute()
关于将字母排列与字典 C 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51367335/