2017-04-30 1 views
0

Ich habe Probleme beim Schneiden einer Zeichenfolge in den Leerzeichen. Hier ist mein Code.Verwenden von getline und stringstream zum Trennen der Zeichenfolge

#include <sstream> 
#include <iostream> 
#include <vector> 
#include <string>  
void formatData(std::string rawTime) { 
std::stringstream rawStream(rawTime); 
std::string month, time, temp, date, timePeriod = ""; 
int day, year, monthNum; 
std::vector<std::string> segments; 

while (std::getline(rawStream, temp, ' ')) { 
    segments.push_back(temp); //now have a vector of {"MM-DD-YYYY", "HH:MM:SS", "XM"} 
} 
date = segments[0]; 
time = segments[1]; 
if (segments.size() > 2) 
    timePeriod = segments[2]; 
///code that assigns month, day and year values 
std::cout << "You were born on " << month << " " << day << ", " << year << " at " << time; } 

main() nimmt nur einen Eingang, bringt es in einen String, übergibt dann die Zeichenfolge an das Format() Funktion oben.

Wenn ich diesen Code mit der Eingabe '08 -27-1980 10:56:59 'ausführen, bricht mein Code bei der Zeile "Zeit = Segmente [1]" und ich bekomme einen Fehler "Vektor Index außerhalb des Bereichs" . Ich erwarte, dass das Programm die Eingabezeichenfolge in zwei Zeichenfolgen aufteilt und jede Zeichenfolge in die Vektorsegmente einfügt. Das ist jedoch nicht das, was passiert. Was ist hier los und wie kann ich es beheben?

+0

[Kann nicht reproduziert werden] (http://coliru.stacked-crooked.com/a/dac93f33965372d8) –

Antwort

0

rawStream ist bereits ein String-Stream, also gibt es einen hilfreichen kleinen Trick, den Sie ausprobieren können. Anstatt getline auf ein Leerzeichen zu setzen, können Sie einfach den überladenen >> Symbolteil von ios verwenden.

while(rawStream >> temp){ 
    ... 
} 
Verwandte Themen