【问题标题】:C++: check whether a word is spelled correctlyC++:检查单词是否拼写正确
【发布时间】:2011-05-30 02:50:33
【问题描述】:

我正在寻找一种简单的方法来检查某个字符串是否是正确拼写的英文单词。例如,'looked' 将返回 True,而 'hurrr' 将返回 False。我不需要拼写建议或任何拼写纠正功能。只是一个简单的函数,它接受一个字符串并返回一个布尔值。

我可以使用 PyEnchant 通过 Python 轻松完成此操作,但如果您想将它与 MS Visual C++ 一起使用,您似乎必须自己编译该库。

【问题讨论】:

标签: c++ spelling


【解决方案1】:

PyEnchant 基于Enchant,这是一个提供 C 和 C++ 接口的 C 库。所以你可以将它用于 C++。最小的例子是这样的:

#include <memory>
#include <cstdio>

#include "enchant.h"
#include "enchant++.h"

int main ()
{
    try
        {
            enchant::Broker *broker = enchant::Broker::instance ();
        std::auto_ptr<enchant::Dict> dict (broker->request_dict ("en_US"));

            const char *check_checks[] = { "hello", "helllo" };
            for (int i = 0; i < (sizeof (check_checks) / sizeof (check_checks[0])); ++i)
        {
            printf ("enchant_dict_check (%s): %d\n", check_checks[i],
                dict->check (check_checks[i]) == false);
        }

    } catch (const enchant::Exception &) {
        return 1;
    }
}

有关更多示例/测试,请参阅他们的SVN repository

【讨论】:

  • 这是我想做的,但我几乎没有在 C++ 中使用外部库的经验。由于他们不提供任何二进制文件,我是否必须在我的项目中包含所有 Enchant 文件,或者我可以以某种方式使用 PyEnchant 包含的 .dll 吗?
  • @Nicholas:看起来它带有 MSVC 项目文件。您可以使用它们来构建库,然后从您自己的代码中引用它。简单地将所有文件包含在您自己的项目中通常也可以正常工作
【解决方案2】:

如果你想自己实现这样的功能,你需要一个数据库来查询一个给定的单词是否有效(通常一个纯文本文件就足够了,比如Linux上的/usr/share/dict/words)。

否则,您可以依赖第三方拼写检查库来执行此操作。

【讨论】:

    【解决方案3】:

    您可以使用其中一个 GNU 字典(如前面提到的 /usr/share/dict/words)并将其构建到适当的数据结构中,以便根据您的性能需求为您提供快速查找和成员资格检查,例如 @987654321 @ 甚至只是一个 trie 可能就足够了。

    【讨论】:

      【解决方案4】:

      首先,您需要一个单词列表。 (/usr/share/dict/words 可能吗?)

      您应该将您的单词列表读入std::set。然后一个正确的拼写测试只是简单地检查所有用户输入的单词是否在集合中。

      【讨论】:

        【解决方案5】:
        bool spell_check(std::string const& str)
        {
          std::cout << "Is '" << str << "' spelled correctly? ";
          std::string input;
          std::getline(input);
        
          return input[0] == 'y' || input[0] == 'Y';
        }
        

        【讨论】:

        • 一个刻薄的,但考虑到规格是正确的,回答这个问题。
        • 你不明白的功能是什么?
        • 为什么要检查第一个字符?是否有任何规则告诉“如果单词以 y 开头,则拼写正确”?
        猜你喜欢
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 2018-03-22
        • 1970-01-01
        • 2013-05-25
        相关资源
        最近更新 更多