変換

2017-03-21 3 views
-1
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) 

ありがとうございました。この変数の定義を考えると

+1

は '(ベクトルセグメント:allSegment)のためにすべきではない::' '(allSegment文字列セグメント)のために'ことだけあなたがする必要があるときにコピーして、各文字列にconst参照を取って考えてみましょうか?あなたは 'ベクトル'を 'ベクトル'要素を含んでいるかのように列挙しようとしていますが意味がありません。 – cdhowie

+1

エラーは、 'string'を'ベクトル 'に変換できないということです。 – chris

+0

はうまくいきました:しかし、私はvector型を取るために_segments_を必要としています。なぜなら、私はvector型をとる関数 'edsm.searchNextSegments(segments)'に渡しているからです。 @cdhowie – Shukri

答えて

1

for(vector<string> segments: allSegment) 

あなたはvector<string>を超える列挙するために求めているが、あなたはvector<string>に各要素を割り当てることを言っている:

vector<string> allSegment; 

このループは意味がありません変数。各要素はstringなので、コンパイラは各string要素をvector<string>に変換すると仮定していますが、このような暗黙の変換はありません。

これにあなたのループを変更

for(string segments: allSegment) 

ベクトルの内容を列挙するときにベクトル内の各文字列をコピーしているとしても、これは、改善される可能性があることに注意してください。

for(string const &segments: allSegment) 
+0

問題を解決していただきありがとうございます。今私は掘る方がいい。 – Shukri