我知道这可能很模糊,但我不得不问!
所以......我今晚必须完成一项功课,而且我差不多完成但是我无法弄清楚我应该怎么做这个功能......
像标题所说的作业是一个AVL树形式的字典,一切正常,但现在我写了一个名为校正器的函数。它返回一个带有来自词典的10个建议的向量来纠正错字。
这是我必须编写函数的例子:
corrector("homeworrk");
return ->
1. homeworker
2. homeworking
3. homey
4. homicidal
5. homesickness
6. homespun
7. homestead
8. homesteader
9. homeward
10. homework
所以我开始写一个函数,它会返回0-1范围内的双精度来量化2个单词之间的相似性。
double Dictionnaire::similitude(const std ::string& mot1, const std ::string& mot2)
{
int minL = min(mot1.length(), mot2.length());
int maxL = max(mot1.length(), mot2.length());
double result = 0;
for (int i = 0; i < minL; i++)
{
if (tolower(mot1[i]) == tolower(mot2[i]))
result++;
}
return (result / maxL);
}
现在..我不知道如何应用这个功能!我试过这个:但它很难实现......
std::vector<std::string> Dictionnaire::recherche(NoeudDictionnaire *root,const std::string &motMalEcrit,std::vector<std::string> correction)
{
if ((root == 0) || (correction.size() == 10))
{
return correction;
}
if ( root->mot > motMalEcrit )
{
if(similitude(root->mot,motMalEcrit) >= 0.3)
{
correction.push_back(root->mot);
}
return recherche(root->gauche, motMalEcrit,correction);
}
else
{
if(similitude(root->mot,motMalEcrit) >= 0.3)
{
correction.push_back(root->mot);
}
return recherche(root->droite, motMalEcrit,correction);
}
}
我会采取任何帮助,我可以采取最糟糕的演员场景,我没有它。
谢谢你们!