Ich habe einige Parsing-Code, der für ermöglicht Escape-Sequenzen in eine Kette von Text eingegeben werden:Gibt es ein "unput" für std :: ostream, wie es existiert "get" für std :: istream?
// In a file or large, multi-line string ...
my_parameter="A setting for the parameter\nthat contains \"escape sequence\" characters"
Wenn ich es analysieren, verarbeiten ich die Schrägstriche und fügen Sie den entsprechenden Zeichen der Zeichenfolge, die ich verwende den Bau eine std::ostringstream
Instanz. Zeilenumbrüche, Anführungszeichen, Backslashes und dergleichen funktionieren einwandfrei. Wie auch immer, ich überlegte, ob ich die \b
Sequenz erlauben sollte oder nicht, und ging hin, um zu sehen, ob ich das letzte Zeichen von meinem ostringstream
"ausgeben" kann, wie Sie von jedem std::istream
"getauften" können. Kannst du so etwas tun? Wenn die Funktion nicht existiert, gibt es eine einfache Möglichkeit, die Schreibposition um ein Zeichen zurückzuschieben und einfach das nächste gelesene Zeichen zu überschreiben?
Dies ist nicht missionskritisch oder so, aber ich war neugierig, ob noch jemand darüber schon einmal gestolpert ist.
Kinda dachte, dass das der Fall war.Ich denke, auf lange Sicht werde ich einfach nicht zulassen, dass das '\ b' verwendet wird (ganz ehrlich, es sollte sowieso nicht nötig sein, dies im Zusammenhang mit dieser Anwendung zu tun) und muss sich nicht darum kümmern. Nur eine dieser seltsamen "Ich frage mich, ob ich ..." Fragen. – Will
Sie könnten einen lokalen Puffer einrichten, um die '\ b's zu verarbeiten; Es wird allgemein akzeptiert, dass die Rücktaste eine neue Zeile nicht rückgängig machen kann, sodass Sie nur eine Zeile auf einmal puffern müssen. Übrigens macht die Befehlszeile dies bereits, wenn sie Informationen an das Programm auf der Standardeingabe übergibt. Oder Sie könnten Literal-Backspace-Zeichen senden und das empfangende Ende entscheiden lassen, wie mit ihnen umzugehen ist. –