2016-09-27 9 views
-2

Doing diese Zuordnung, wo ich Informationen in eine Struktur analysieren und ich bekomme weiterhin eine Fehlermeldung "Zeichenfolge Index außerhalb des Bereichs", wenn Sie versuchen zu testen. Kann nicht herausfinden, wo ich falsch gelaufen bin.Empfangen "Zeichenfolge Index außerhalb des Bereichs" Fehler

hier ist die Struktur

struct baby_type { 

std::string name; 
std::vector<int> yearsCount; 
    int total; 
} ; 

hier meine Funktion

baby_type Parse_Line(const std::string line) 
{ 

baby_type baby; 
std::string name; 
std::string year;// = "0000"; 
std::string total; 
int i = 0; 
int k = 1; 
int LengthOfOccurences = 0; 
int DigitOfOccurences = 0; 

while (line.at(i) != ',') { 
    name[i] = line.at(i); 
    i++; 
} 
baby.name = name; 
i++; 

while (k < 100) { 
    if (line.at(i) == ',') { 
     year.resize(LengthOfOccurences); 
     baby.yearsCount.at(k) = std::stoi(year); 
     //year = "0000"; 
     i++; 
     k++; 
     DigitOfOccurences = 0; 
     LengthOfOccurences = 0; 
    } 
    else { 
     year.at(DigitOfOccurences) = line.at(i); 
     i++; 
     LengthOfOccurences++; 
    } 
} 

int m = 0; 
int LengthOfLine = line.length(); 

while (i < LengthOfLine) { 
    total.at(m) = line.at(i); 
    m++; 
    i++; 
} 

baby.total = std::stoi(total); 

return baby; 
} 
+0

was meinst du –

+0

Sie lesen viele Zeichen von 'line', bevor Sie ihre Länge überprüfen. Auf einen Blick scheint es, dass Ihre 'line.at (i)' - Aufrufe über das Ende von 'line' hinauslaufen, wenn sie weniger als 100 Kommas enthalten, da die while-Schleifen nur dann enden, wenn Sie mehrere Kommas lesen und nicht wann Du erreichst das Ende von 'line'. –

+0

Fügen Sie @Rene Verbesserung hinzu. Sie erhöhen die 'i'-Variable und eine dieser Anweisungen wird außer Reichweite gesetzt. Sie müssen es begrenzen. Nach dem Überprüfen des Codes bin ich mir auch sicher, dass die Zeile 'year.at (DigitOfOccurences) = line.at (i);' und auch Probleme verursacht. Bitte versuche es neu zu schreiben. – Fr333du

Antwort

-1

ist Wenn Sie leer std :: string-Objekte erstellen und dann Zeichen auf bestimmte Positionen zuweisen. std :: strings funktionieren nicht so. In Ihrem ersten while-Schleife verwenden

name.append(1,line.at(i)); 

Die ‚1‘ ist notwendig, weil es keine einfache std :: anhängen mit nur einem Zeichen als Parameter.

+0

Was ist mit 'push_back'? – Rakete1111

+0

Richtig, das könnte verwendet werden. – Rene

Verwandte Themen