Konvertiert eine Zeichenfolge mit expliziter Escape-Sequenz in ein relatives Zeichen

8

Ich brauche eine Funktion, um "explizite" Escape-Sequenzen in das relative nicht druckbare Zeichen zu konvertieren. Es:

%Vor%

würde diese Ausgabe geben:

%Vor%

Gibt es irgendeine Funktion, die das tut?

    
Michele De Pascalis 10.04.2011, 13:52
quelle

5 Antworten

13

Ich denke, dass Sie solche Funktionen selbst schreiben müssen, da Escape-Zeichen ein Kompilier-Feature sind, d. h. wenn Sie "\n" schreiben, ersetzt der Compiler die \n Sequenz durch das eol Zeichen. Die resultierende Zeichenfolge hat Länge 1 (ohne das abschließende Nullzeichen).

In Ihrem Fall hat eine Zeichenkette "\n" die Länge <2> (einschließlich der abschließenden Null) und enthält \ und n .

Sie müssen Ihre Zeichenfolge scannen und wenn Sie auf \ stoßen, überprüfen Sie das folgende Zeichen. Wenn es sich um einen der legalen Escapezeichen handelt, sollten Sie beide durch das entsprechende Zeichen ersetzen, andernfalls überspringen oder lassen Sie beide unverändert.

( Ссылка ):

%Vor%     
davka 10.04.2011, 14:08
quelle
5

Mit der Boost-String-Algorithmus-Bibliothek können Sie das ganz einfach machen. Zum Beispiel:

%Vor%

Dies ist sicherlich nicht der effizienteste Weg, dies zu tun (weil es die Zeichenfolge mehrmals wiederholt), aber es ist kompakt und leicht zu verstehen.

Aktualisieren : Wie ybungalobill darauf hingewiesen hat, ist diese Implementierung falsch, wenn eine Ersatzzeichenfolge eine Zeichensequenz erzeugt, nach der später gesucht wird, oder wenn ein Ersetzen eine Zeichensequenz entfernt / ändert, die ersetzt werden sollte.

Ein Beispiel für den ersten Fall ist "\\n" - & gt; "\n" - & gt; %Code%. Wenn Sie "\n" - & gt; "\\" Ersatz zuletzt (was auf den ersten Blick die Lösung zu sein scheint), erhalten Sie ein Beispiel für den letzteren Fall "\" - & gt; %Code%. Offensichtlich gibt es keine einfache Lösung für dieses Problem, wodurch diese Technik nur für sehr einfache Escape-Sequenzen möglich ist.

Wenn Sie eine generische (und effizientere) Lösung benötigen, sollten Sie eine Zustandsmaschine implementieren, die die von davka vorgeschlagene Zeichenfolge iteriert.

    
ollb 10.04.2011 15:03
quelle
1

Ich bin sicher, dass es da ist, von jemandem geschrieben, aber es ist so trivial, dass ich bezweifle, dass es irgendwo veröffentlicht wurde.

Erstelle es einfach selbst aus den verschiedenen "find" / "replace" -esken Algorithmen in der Standardbibliothek.

    
quelle
0

Haben Sie darüber nachgedacht, printf zu verwenden? (oder einer seiner Verwandten)

    
snoofkin 10.04.2011 13:57
quelle
0

Hier ist eine nette Art, es auf Unixy-Plattformen zu machen.

Er ruft den Befehl echo des Betriebssystems auf, um die Konvertierung durchzuführen.

%Vor%     
nobar 02.03.2017 22:54
quelle

Tags und Links