我有两个包含字符串的向量。我想比较vector1的每个字符串和vector2的每个字符串,并检查两个字符串中有多少单词相同。我只能在两个字符串完全相似的情况下使用代码:
Compare::Compare(vector<string> text1, vector<string> text2, int ratio)
{
text1Size_ = text1.size();
text2Size_ = text2.size();
if(text1Size_ > text2Size_)
{
totalWords_ = text1Size_;
}
else
{
totalWords_ = text2Size_;
}
it = text1.begin();
for(int i = 0; i < text1Size_; i++)
{
it2 = text2.begin();
for(int i = 0; i < text2Size_; i++)
{
if(*it == *it2)
{
cout << "Perfect match";
}
it2++;
}
it++;
}
}
如果他们至少有相似单词的比例,我需要返回每个相似的字符串。
是否有一种比解析每个字符串更简单的方法,将每个单词放在一个数组中并进行比较?
- 编辑 -
我的意思是像“鸟”这样的文字。我举个例子。
我说我每个载体只有一个字符串,我需要70%的相似度:
string1 : The blue bird.
string2 : The bird.
我想要做的是检查两个句子中是否至少有60%的书面文字匹配。
这里我有匹配的“The”和“Bird”。所以我有2/3相似的单词(66.666%)。所以这些字符串将被接受。
-EDIT 2 -
我认为我不能在这里使用“.compare()”因为它会检查每个字符而不是每个书面字......
答案 0 :(得分:1)
使用字符串流将字符串拆分为单词:
#include <sstream>
bool is_similar(string str1, string str2)
{
vector<string> words1, words2;
string temp;
// Convert the first string to a list of words
std::stringstream stringstream1(str1);
while (stringstream1 >> temp)
words1.push_back(temp);
// Convert the second string to a list of words
std::stringstream stringstream2(str2);
while (stringstream2 >> temp)
words2.push_back(temp);
int num_of_identical_words = 0;
// Now, use the code you already have to count identical words
...
double ratio = (double)num_of_identical_words / words2.size();
return ratio > 0.6;
}