Ich habe ein Programm, das Textdateien dekomprimiert. Wenn der Eingang 4A ist, sollte "AAAA" gedruckt werden. Mein Problem ist, wenn ich versuche, die Ganzzahlen zu trennen, die in der Schnur enthalten sind, weil, nachdem das Programm 3 Zahlen liest, es in eine Endlosschleife zu kommen scheint. dies ist mein Code:Trennen Sie die ganzen Zahlen von einer Zeichenfolge
while (getline(cin, line)){
for(i = 0; i<line.length(); i++) {
char * x = &line.at(i);
if(isdigit(line.at(i))){
counter = atoi (x);
}
...............
**Do Something**
Ich habe versucht, so bald das Zeichen x zu drucken, wie sie einen Wert bekommt, aber wie ich schon sagte, nachdem es 3 Zahlen liest es in eine Endlosschleife zu bekommen. Bitte helfen Sie
Vielen Dank im Voraus.
Verwenden Sie einen Debugger. –
Das ist nicht dein Code. Das ist Ihre Zusammenfassung dessen, was Sie denken, verursacht das Problem - das ist nicht das Gleiche. Versuchen Sie, tatsächlichen Code zur Verfügung zu stellen, mit dem andere Ihr Symptom in Form eines [mcve] neu erstellen können. Stellen Sie auch eine Stichprobe von Daten bereit, die das Symptom mit diesem Code auslösen. – Peter
Ist Ihnen bewusst, dass 'atoi()' so lange Zeichen wie Ziffern verarbeitet (d. H. Es stoppt bei der ersten Nicht-Ziffer, die das Beenden von '\ 0' einschließt). Bitte denken Sie über die folgenden Fälle nach: "12A" (komprimiert von "AAAAAAAAAAAAA"), "35A" (komprimiert von "555A") und schließlich "35". Letzteres könnte möglicherweise 'atoi()' dazu zwingen, nach dem Pufferende zu lesen, wenn "line" vom Typ "std :: string" ist. AFAIK, Sie können nicht darauf zählen, dass der interne Puffer von 'std :: string' mit '\ 0' beendet wird. (Für diese Zuweisung existiert 'std :: string :: c_str()'.) – Scheff