wenn ich die stdin
Eingang haben, wie folgt:Parsing von stdin mit C++, Monat, Jahr
2014-01-23, AA, 20
2014-05-30, BB,2 //notice that I might have optional space
2015-03-24, CC, 5
//...
//... and so on
Wie schreibe ich ein Programm in C++, die die Monat und Jahr, effizient analysieren und auch nachfolgendes Feld? Ich bin wirklich von diesem Parsing-Problem festgefahren.
Was ich mit dem folgenden Feld machen möchte, wird AA, 20
als eine Karte gespeichert. Also map[AA]=20
so weiter. Ich kann das selbst machen. Aber ich kann nicht herausfinden, wie man es liest und analysiert. Bitte helfen.
Versuch:
int year, month;
int num;
string key;
map<string, int> mapping;
string s;
getline(cin,s, '-');
year=stoi(s);
getline(cin,s, '-');
month=stoi(s);
getline(cin,s, ',');
//reading the AA, BB, CC field;
getline(cin,s, ',');
for (int i=0; i<s.size(); i++);
if (s[i]==' ') s.erase(i,1);
key=s;
//now, reading the number field following AA,BB, CC
getline(cin,s,'\n');
for (int i=0; i<s.size(); i++);
if (s[i]==' ') s.erase(i,1);
num=stoi(s);
mapping[key]=num;
Sie müssen diesen einen Schritt nach dem anderen machen. Schreiben Sie zuerst ein Programm, das jede Textzeile Zeile für Zeile liest. Schritt zwei: Pars jede Zeile von Text in die einzelnen Felder. Schritt drei: parse das erste Feld in seine Komponente, Jahr, Monat und Tag. Problem gelöst. Siehst du wie einfach es war? –
ja, das ist einfach. Aber mein Code ist ein bisschen lang. – wrek
Es gibt ein altes vulkanisches Sprichwort: Je länger der Code, desto wahrscheinlicher ist es, dass es einen Fehler hat. –