C++ 拼写检查器c++;;检查单词是否在词典文本中

C++ 拼写检查器c++;;检查单词是否在词典文本中,c++,string,iterator,unordered-set,C++,String,Iterator,Unordered Set,我对这个地方不熟悉,所以我可能问不清楚我的问题。但我真的需要帮助。所以我的作业是在C++中创建一个拼写检查程序,它使用文本文件并将它与另一个字典文本文件进行比较。我有一段特定的代码需要解决。我创建了一个帮助函数isValidWord,它接收字典中的容器无序集和一个字符串。如果字符串与字典中的单词匹配,则函数将返回true。我会告诉你我到目前为止有什么。我的问题是字符串与库中的所有内容不匹配,只检查字典中的一些内容 #include <unordered_set> #include &

我对这个地方不熟悉,所以我可能问不清楚我的问题。但我真的需要帮助。所以我的作业是在C++中创建一个拼写检查程序,它使用文本文件并将它与另一个字典文本文件进行比较。我有一段特定的代码需要解决。我创建了一个帮助函数isValidWord,它接收字典中的容器无序集和一个字符串。如果字符串与字典中的单词匹配,则函数将返回true。我会告诉你我到目前为止有什么。我的问题是字符串与库中的所有内容不匹配,只检查字典中的一些内容

#include <unordered_set>
#include <string>
bool isValidWord(std::unordered_set<std::string> dictionary, std::string& word) {
        std::unordered_set<std::string>::iterator it;
        for (it = dictionary.begin(); it != dictionary.end(); ++it) {
            if (word == *it) {
                return true;
            }
        }
        return false;
    }
#包括
#包括
bool-isValidWord(标准::无序集字典,标准::字符串和单词){
std::无序_集::迭代器;
for(it=dictionary.begin();it!=dictionary.end();+it){
if(word==*it){
返回true;
}
}
返回false;
}

有一个内置的,你可以利用它,而不是重新发明轮子。另外,最好通过引用传递
字典
,以避免无意义的复制

有一个内置功能,您可以利用它,而不是重新发明轮子。另外,最好通过引用传递
字典
,以避免无意义的复制

您可以简化您的方法(我添加了missing
const
和reference):

bool-isValidWord(const-std::无序集和字典),
常量std::字符串和单词)
{
返回字典。计数(单词)!=0;
}
您当前的实现是正确的,但没有性能:

  • 你一份一份地传递字典(所以每次你都要重新创建它)
  • 您使用线性搜索,而容器提供了更好的复杂性。(
    std::无序集::查找
    std::无序集::计数

最后请注意,如果您想检索所有无效单词,您可以查看
std::set_difference
(需要对单词和字典进行排序)。

您可以简化您的方法(我添加了missing
const
和reference):

bool-isValidWord(const-std::无序集和字典),
常量std::字符串和单词)
{
返回字典。计数(单词)!=0;
}
您当前的实现是正确的,但没有性能:

  • 你一份一份地传递字典(所以每次你都要重新创建它)
  • 您使用线性搜索,而容器提供了更好的复杂性。(
    std::无序集::查找
    std::无序集::计数

最后请注意,如果要检索所有无效单词,可以查看
std::set_difference
(需要对单词和词典进行排序).

它与字母大小写不匹配的原因是什么?你能给出一个输入示例,其中字符串与所有内容都不匹配吗?@CodeGorilla大小写问题已经解决了of@SebastianStern该字符串将只检查字典中的2个单词,当字典有80k+个单词时,请通过引用访问字典,您不想通过value
bool isValidWord传递它(std::unordered_set&dictionary…
与字母大小写不匹配的原因是什么?你能给出一个输入示例,其中字符串与所有内容都不匹配吗?@CodeGorilla大小写问题已经解决了of@SebastianStern当字典有80k+w时,字符串将只检查字典中的2个单词或者通过引用来访问字典,请不要通过值传递它。
bool isValidWord(std::unordered\u set&dictionary…
这是一段非常优雅的代码。非常感谢这段代码。非常感谢
bool isValidWord(const std::unordered_set<std::string>& dictionary,
                 const std::string& word)
{
    return dictionary.count(word) != 0;
}