我已经创建了一个程序,它将读取文本文件,并将文字作为字符串放入链接列表中,以及文本文件中的频率计数。它只显示每个单词出现的总次数的一个出现次数。将一个链接列表与另一个黑名单与Word频率列表进行比较C++
我的程序还加载了一个黑名单,在黑名单中它应该将黑名单链表与词云(或词频)链表进行比较,然后从词频列表中删除黑名单中的单词。
我试过这样做了几种方法。以下是我的第三个版本。我想要做的是为每个节点添加一个布尔值,并且当一个节点等于黑名单中的一个单词时,布尔值将为true。但是,我没有得到它与以下代码正确打印。我搜索了,我似乎无法找到正确的语法来添加布尔值到链接列表中的节点。
编辑#3:
void wordCloud::compareWith(wordCloud& wordList, wordCloud& badList){
wordNode *wordListTemp, *blacklistTemp, *temp = NULL;
unsigned int counter = 0;
for (blacklistTemp = badList.head; blacklistTemp; blacklistTemp = blacklistTemp->next){
cout << blacklistTemp->myWord << "\n";
for (wordListTemp = wordList.head; wordListTemp; wordListTemp = wordListTemp->next){
if (wordListTemp->myWord != blacklistTemp->myWord){
wordListTemp->blacklist = false;
if (wordListTemp->blacklist = false){
cout << wordListTemp->myWord << " <"
<< wordListTemp->freq_count << ">\n";
}
}
else if (wordListTemp->myWord == blacklistTemp->myWord){
cout << blacklistTemp->myWord << " " << wordListTemp->myWord << "\n";
wordListTemp->blacklist = true;
if (wordListTemp->blacklist = true)
cout << wordListTemp->myWord << "\n";
}
}
//counter++;
cout << blacklistTemp->myWord << " " << wordListTemp->myWord << "\n";
}
system("pause");
}
这是不完整的,但据我已经得到了。问题是它只打印真假,如果不打印任何假。即使我切换这些值,它仍然只会打印出真正的if。所以我假设我正在讨论这个错误。将一个节点“标记”为真并将一个节点“标记”为假的正确方法是什么?所有的cout都用于调试目的。我将在稍后删除或评论这些内容。
这是一个天真的实现,但为什么不只是做两个while循环,一个在另一个之内?你在外部黑名单上查看,在内部,你将你当前的黑名单单词与你单词列表中的所有单词进行比较?它显然可以优化,但至少它会给你一个工作的开始。 –
@o_weisman是的,也许我正在调查这太多。这实际上是我现在想要做的。在解决移植代码问题上我有点慢,所以如果有任何成功,我会回复。 – charlwillia6
@o_weisman - 我曾尝试过这一点,但似乎没有得到任何地方。我发布了上面的代码,但程序仍然冻结。 – charlwillia6