2017-03-21 1 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; 
} 

Die erste Methode compactRepresent multiples Sequenz in einer kompakten Art und Weise darstellt, und für das zweite Spiel , versucht es Übereinstimmung mit irgendeiner Methode zu finden.Umstellen von Grunde Zeichenfolge Vektor innerhalb für jede Schleife

Meine Frage ist, wenn ich je Segmente gründliches allsegments am Looping, gibt es den Datentyp Fehler wie folgt:

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) 

Danke.

+1

Sollte nicht 'für (Vektor Segmente: allSegment)' 'sein für (string Segmente: allSegment)'? Sie versuchen, einen 'Vektor ' aufzuzählen, als ob er 'vector ' Elemente enthält, was keinen Sinn macht. – cdhowie

+1

Der Fehler besagt, dass Sie eine 'Zeichenfolge' nicht in eine' Vektor- ' konvertieren können. – chris

+0

das funktionierte: aber ich brauche _segments_ als Vektortyp zu sein, weil ich an die Funktion 'edsm.searchNextSegments (segments)' übergebe, die einen Vektortyp annimmt. @cdhowie – Shukri

Antwort

1

diese Variable Definition Gegeben:

vector<string> allSegment; 

Diese Schleife macht keinen Sinn:

for(vector<string> segments: allSegment) 

Sie fragen einen vector<string> aufzuzählen über aber sagen, dass Sie jedes Element in ein vector<string> zuweisen möchten Variable. Da jedes Element ein string ist, nimmt der Compiler an, dass Sie jedes string-Element zu vector<string> konvertieren möchten, aber es gibt keine solche implizite Konvertierung daher der Fehler.

dazu ändern Schleife:

for(string segments: allSegment) 

Beachten Sie, dass dies noch verbessert werden könnte, wie Sie Kopieren jede Zeichenfolge in dem Vektor sind, wenn der Inhalt Vektor aufzählt. Betrachten wir ein const Bezug auf jede Saite nehmen, nur kopieren, wenn Sie müssen:

for(string const &segments: allSegment) 
+0

Vielen Dank, dass das Problem gelöst wurde. Jetzt muss ich besser graben .. – Shukri