我正在寻找一种简单的方法来检查某个字符串是否是正确拼写的英文单词。例如,'looked' 将返回 True,而 'hurrr' 将返回 False。我不需要拼写建议或任何拼写纠正功能。只是一个简单的函数,它接受一个字符串并返回一个布尔值。
我可以使用 PyEnchant 使用 Python 轻松完成此操作,但如果您想将它与 MS Visual C++ 一起使用,您似乎必须自己编译该库。
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 存储库。
如果你想自己实现这样的功能,你需要一个数据库来查询,以确定给定的单词是否有效(通常一个纯文本文件就足够了,比如/usr/share/dict/words
在 Linux 上)。
否则,您可以依赖第三方拼写检查库来做到这一点。
首先,您需要一个单词列表。(/usr/share/dict/words也许?)
你应该把你的单词表读成std::set
. 然后一个正确的拼写测试只是简单地检查所有用户输入的单词是否在集合中。
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';
}