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はコンパクトな方法で複数の配列を表し、2番目の一致ために、それはいくつかの方法を使用して一致を見つけようとします。私は、各セグメントに徹底allsegmentsをループしていたときに変換
私の質問があり、それは以下のようなデータ型エラーを与える:
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)
ありがとうございました。この変数の定義を考えると
は '(ベクトルセグメント:allSegment)のためにすべきではない::' '(allSegment文字列セグメント)のために'ことだけあなたがする必要があるときにコピーして、各文字列に'を 'ベクトル'要素を含んでいるかのように列挙しようとしていますが意味がありません。 –
cdhowie
const
参照を取って考えてみましょうか?あなたは 'ベクトルエラーは、 'string'を'ベクトル 'に変換できないということです。 –
chris
はうまくいきました:しかし、私はvector型を取るために_segments_を必要としています。なぜなら、私はvector型をとる関数 'edsm.searchNextSegments(segments)'に渡しているからです。 @cdhowie – Shukri