Parsing ist ein array von chars
Sagen wir mal ich haben " - Spiel.abc" wie eine Zeichenkette (array von chars), und ich will um die chars, die vor dem Punkt. Was würden Sie erachten den effizientesten Weg, dies zu tun in C?
Ist eine "Weile bis . kopieren von char zu char" der Weg zu gehen oder gibt es eine andere Möglichkeit?
Ich hoffe, diese Frage kann helfen, auch andere.
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
können Sie auch
strchr()
gefolgt vonstrncpy()
zu finden, die erste Instanz von '.' in deinem string und kopieren Sie dann alle Zeichen, bevor es zu einer anderen KetteEs hängt davon ab, was Sie versuchen zu optimieren. Wenn für die Lesbarkeit einer Leichtigkeit von Verständnis/verwalten, dann binW s Vorschlag ist richtig.
Wenn Sie jagen Zyklen und nur besuchen wollen, jedes Zeichen der Eingabe, einmal, dann ist es besser, die zwei Operationen (Suche nach dot und kopieren) und parallel dazu, wie Sie vorschlagen, wenn du Sie beide in die gleiche Schleife.
Beachten Sie, dass die letztere riecht sehr viel frühzeitiger Optimierung obwohl.
Je nach GENAU das, was Sie versuchen zu erreichen, Parsen Sie den string Zeichen für Zeichen selbst kann am effizientesten in Bezug auf die Verarbeitungsgeschwindigkeit. Ansonsten ist der standard-string-Bibliothek-Funktionen sind wahrscheinlich der Weg zu gehen, wie bereits in den anderen Antworten.
Effizientesten kopieren von Puffer zu Puffer wäre:
Jedoch diese Risiken buffer overflows.
Effizientesten kopieren zu reservierten Speicher wäre wahrscheinlich:
Ich hoffe, dass meine Mathematik richtig ist es. Es sein sollte. Sie können, je nach compiler, bekommen eine leichte Optimierung durch die Zuordnung (in_ptr - in_string) in eine andere variable so, es wird nur einmal berechnet. Diese zweite Lösung ist fast identisch zum Aufruf strchr (), dann ist memcpy(). Ich empfehle memcpy, wie es spart zu ersetzen '.' mit einem null-terminator ersetzen Sie es anschließend wieder ein, und kopieren Sie den null-terminator von einem string zum anderen.
Als Entspannung Antwort (die kam während ich dies Schreibe) dies alles ist wohl unnötig Optimierung. Aber schön, bewusst zu sein.
Können Sie strtok() zu tokenise string .
}
Ausgabe