Strings parsen...
-
hallo,
ich habe hier einen char[ 1024 ]; der enthält dummerweise dinge wie "%2F" und so weiter. wie kann ich dieses "%2F" nun durch "/" ersetzen? ich hab es schon mit strtok probiert, doch das hat nicht wirklich funktioniert ( ausser ein paar seg-faults...)...
ciao, cypoc
-
Ist in C nicht ganz einfach: Du suchst den String und merkst dir, wo er aufhört. Dann setzt Du in den ersten Teil des Suchstrings ein '/' (etc) ein. Vom Stringende kopierst Du dann häppchenweise bis direkt nach das neu gesetzte Zeichen. Sollte der einzusetzende String länger als der Suchstring sein, dann musst Du noch ein paar Klimmzüge machen ...
In C++ benutzt man vermutlich std::string und dann irgendeine replace-Methode. Die machen das.
-
und wie heißen diese "replace"-methoden???
hab es vorhin schon so probiert, wie du es beschrieben hast. alles bis zum teilstring in eine neue variable schreiben ein "/" anfügen, und den rest der ursprünglichen variable anhängen. das problem mit strtok ist nur, dass es einen zeiger auf den ANFANG der übereinstimmung zurückgibt.ich hab also z.b.: test%2Fconfig.cfg
nach meiner manipulation: test/2Fconfig.cfg
und das ist auch noch nicht so ganz das wahre...erst mal danke für deine hilfe.
ciao, cypoc
-
Du musst das 2F natyrlich auch ersetzen.
2 -> 216^1
F -> 1516^0
dann beides addieren: 47
dann in char casten: /
-
#include <string> using namespace std; void srch_repl(std::string &s,const std::string &to_find,const std::string& repl_with) { std::string::size_type pos = 0; while((pos = s.find(to_find,(std::string::size_type)pos)) != std::string::npos) { s.replace(pos, to_find.size(), repl_with); pos+=repl_with.size(); } } int main() { std::string temp("Hallo Welt %2F Sollte funktionieren. Vllt. gibts was besseres :clown: %2F ") ; srch_repl(temp,"%2F","\\"); }
[/cpp]
-
ich weiß ja, das "%2F" gleich "/" ist. doch mein problem ist ja, das ich ( bis jetzt ) nicht drei zeichen durch eins ersetzen kann ( denn "///" ist dann auch wieder ein bissl viel des guten
).
es ist aber trotzdem gut zu wissen, wie man im allgemeinen diese "enkodierungen zurückverwandelt". danke!
ciao, cypoc
-
cypoc schrieb:
und wie heißen diese "replace"-methoden???
hab es vorhin schon so probiert, wie du es beschrieben hast. alles bis zum teilstring in eine neue variable schreiben ein "/" anfügen, und den rest der ursprünglichen variable anhängen. das problem mit strtok ist nur, dass es einen zeiger auf den ANFANG der übereinstimmung zurückgibt.Nehmen wir an, p sei der Zeiger auf den Anfang des gesuchten Strings, so ist 'p + strlen(suchstring)' das erste Zeichen, das nicht mehr zu diesem gesuchten String gehört (wobei suchstring zB "%2F" sein kann). Wo ist da das Problem?
(strtok ist mE die falsche Funktion. Du suchst strstr.)
-
also wieso ich da nicht drauf gekommen bin, weiß ich nicht.
klingt auf jeden fall logisch. werde das mal probieren.thx + ciao, cypoc