将字母排列与字典 C 进行比较

标签 c string dictionary permutation words

我一直在尝试编写一个程序,它只输出 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/

相关文章:

c - 写入C中文件夹中的文件

c - 如何创建 scanf() 的替代品

java - 固定序列排列

c++ - 传递字符串 'by value' 本地值的变化反射(reflect)在原始值中

python - 将字典存储在数据框中,该数据框在唯一值列中具有重复条目

javascript - 如何在 javascript 中迭代 'fetch' 返回的结果?

c - 使用 libjpeg 时未定义对 jpeg_CreateDecompress() 的引用错误

c - 从文件接收到数据并需要打印它,但程序没有正确读取数据?

javascript - 如何打印 413284921265094656?

javascript - 如何使用 javascript/jquery 获取图像映射的顶部/左侧 x/y?