vector<string> compactRepresent (){
bool matched = false;
string dif = "";
string currentDif = "";
vector <string> text;
unsigned int i, j;
for (i = 0; i < vec[0].size(); ++i)
{
for (j = 1; j < vec.size(); ++j)
{
if (vec[0][i] != vec[j][i])
{
if (find(currentDif.begin(), currentDif.end(), vec[0][i]) == currentDif.end())
{
currentDif += vec[0][i];
}
if (find(currentDif.begin(), currentDif.end(), vec[j][i]) == currentDif.end())
{
currentDif += vec[j][i];
}
matched = true;
}
}
if (matched)
{
dif += " {" + currentDif + "} ";
currentDif = "";
text.push_back(dif);
matched = false;
}
else
{
dif += vec[0][i];
currentDif = "";
text.push_back(dif);
matched = false;
}
}
cout << dif << endl;
return text;
}
int match (vector<string> patterns){
vector<string> allSegment = compactRepresent();
vector<int> matchLists;
for(string smallPatt : patterns)
{
EDSM edsm(smallPatt);
for(vector<string> segments: allSegment)
{
edsm.searchNextSegment(segments);
edsm.getMatches();
}
matchLists = edsm.getMatches();
}
for(const int m: matchLists)
{
cout << m << endl;
}
return 0;
}
第一种方法 compactRepresent 以紧凑的方式表示多个序列,而对于第二种方法匹配,它尝试使用某种方法查找匹配。
我的问题是,当我通过所有段遍历每个段时,它会给出数据类型错误,如下所示:
error: conversion from ‘std::__cxx11::basic_string<char>’ to non-scalar type ‘std::vector<std::__cxx11::basic_string<char> >’ requested
for(vector<string> segments: allSegment)
谢谢。
答案 0 :(得分:1)
鉴于此变量定义:
vector<string> allSegment;
这个循环毫无意义:
for(vector<string> segments: allSegment)
您要求对vector<string>
进行枚举,但是要说您要将每个元素分配到vector<string>
变量中。因为每个元素都是string
,所以编译器假定您要将每个string
元素转换为vector<string>
,但没有这种隐式转换,因此错误。
将循环更改为:
for(string segments: allSegment)
请注意,即使这样也可以改进,因为在枚举向量内容时,您正在复制向量中的每个字符串。考虑对每个字符串进行const
引用,只在需要时进行复制:
for(string const &segments: allSegment)