Das funktioniert in meinen schnellen und schmutzigen Tests. Ist es an Ort und Stelle:
%Vor% Und um Chris zu beschwichtigen, ist hier eine Version, die zuerst eine Kopie erstellt und sie zurückgibt (also wird es mit Literalen funktionieren). Sie müssen free
das Ergebnis.
Wenn Sie \ n oder \ t durch etwas anderes ersetzen möchten, können Sie die Funktion strstr () verwenden. Es gibt einen Zeiger auf den ersten Platz in einer Funktion mit einer bestimmten Zeichenfolge zurück. Zum Beispiel:
%Vor%Sie können das in einer Schleife ausführen, um alle \ n's und \ t's zu finden.
Wenn Sie sie "strippen" möchten, dh sie aus der Zeichenfolge entfernen , müssen Sie tatsächlich die gleiche Methode wie oben verwenden, aber kopieren Sie den Inhalt der Zeichenfolge "zurück" alle Zeit finden Sie ein \ n oder \ t, so dass "das ist ein Test" wird: "Dies ist ein Test".
Sie können das mit memmove tun (nicht memcpy, da src und dst auf überlappenden Speicher zeigen), so:
%Vor%Sie müssen diese Schleife erneut wiederholen, um die \ t's zu entfernen.
Hinweis: Beide Methoden funktionieren direkt. Dies ist möglicherweise nicht sicher! (Lesen Sie die Kommentare von Evan Teran für Details. . Auch diese Methoden sind nicht sehr effizient, obwohl sie eine Bibliotheksfunktion für einen Teil des Codes verwenden, anstatt Ihre eigenen zu rollen.
Grundsätzlich haben Sie zwei Möglichkeiten: Sie können eine Kopie der ursprünglichen Zeichenfolge erstellen, abzüglich aller '\t'
- und '\n'
-Zeichen, oder Sie können die Zeichenfolge "in-place" entfernen. Ich wette jedoch, dass die erste Option schneller sein wird, und ich verspreche Ihnen, dass es sicherer ist.
Also machen wir eine Funktion:
%Vor% Wir möchten strlen()
und malloc()
, um einen neuen char *
-Puffer der gleichen Größe wie unser str
-Puffer zuzuweisen. Dann gehen wir durch str
Zeichen für Zeichen. Wenn das Zeichen nicht in d
enthalten ist, kopieren wir es in unseren neuen Puffer. Wir können etwas wie strchr()
verwenden, um zu sehen, ob sich jedes Zeichen in der Zeichenfolge d
befindet. . Sobald wir fertig sind, haben wir einen neuen Puffer, mit dem Inhalt unseres alten Puffers minus Zeichen in der Zeichenkette d
, also geben wir einfach diesen zurück. Ich gebe Ihnen keinen Beispielcode, da dies vielleicht Hausaufgaben sind, aber hier ist die Beispielverwendung, um Ihnen zu zeigen, wie sie Ihr Problem löst:
Dies ist eine c-String-Funktion, die ein beliebiges Zeichen in accept
findet und einen Zeiger auf diese Position oder NULL zurückgibt, wenn sie nicht gefunden wird.
Beispiel:
%Vor% first_occ
zeigt auf das \ t oder die 15 Zeichen in search
. Sie können ersetzen und dann erneut zum Durchschleifen aufrufen, bis alle ersetzt wurden.