PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C - String in String finden


Matrix316
2007-01-13, 13:40:26
Gibts denn eine Funktion mit der ich einen String in einen String finden kann, ohne jedes Zeichen einzeln auslesen zu müssen?

Gefunden habe ich "strcspn": "Find a substring in a string."

Das funktioniert auch, aber nur, wenn der Substring im String vorhanden ist. Wenn nicht, gibts als Rückgabewert sehr komische Werte die mir nicht helfen, da ich nur ein Ergebnis brauche, wenn genau der Substring vorhanden ist.

Trap
2007-01-13, 13:47:03
Gibts denn eine Funktion mit der ich einen String in einen String finden kann, ohne jedes Zeichen einzeln auslesen zu müssen?
Was meinst du damit genau? Die Standardbibliothek-Funktionen dürften alle naive Suche implementieren also unglaublich lahm sein wenn man 100000*a+b in einem Megabyte a-String sucht.

Die Funktion die das macht wäre:
http://www.cplusplus.com/reference/clibrary/cstring/strstr.html (nicht vom C++ in der URL verwirren lassen, das ist eine C Funktion)

Matrix316
2007-01-13, 13:49:23
Wie so immer, wenn ich hier den Thread aufmache, finde ich kurz danach die Lösung meist selbst. ;)

Jo, strstr ist genau das was ich suche.

So groß sind die Strings nicht. Höchstens so, keine Ahnung, vielleicht 100 Zeichen.

BavariaBlade
2007-01-13, 13:51:35
Gibts denn eine Funktion mit der ich einen String in einen String finden kann, ohne jedes Zeichen einzeln auslesen zu müssen?

Gefunden habe ich "strcspn": "Find a substring in a string."

Das funktioniert auch, aber nur, wenn der Substring im String vorhanden ist. Wenn nicht, gibts als Rückgabewert sehr komische Werte die mir nicht helfen, da ich nur ein Ergebnis brauche, wenn genau der Substring vorhanden ist.

Eventuell strcmp:

http://www.cplusplus.com/reference/clibrary/cstring/strcmp.html

Ich hab zuerst Java gelernt und dann C/C++. Und C++ ist bei den Strings wirklich pain in the ***, zumindest für Umsteiger.
Das meiste mache ich mittlerweile mit CString's der MFC die sind auf alle Fälle schonmal ein guter Ansatz.

Matrix316
2007-01-13, 14:00:38
Strcmp hilft mir nicht viel, da ich die Position des Strings brauche. Ich versuche nämlich Werte aus einem XML File auszulesen. Allerdings in einem directshow Filter, wo ich keinen Zugriff auf die normalen c++ header habe (gibt Fehler beim kompilieren).

Gast
2007-01-13, 14:23:19
Bau dir ne eigene String-Klasse. Idealerweise als Template mit noch einem eigenen Template-Char-Typ, damit man keine Probleme mehr mit der Umstellung auf Unicode hat.

Das kostet zwar 1-2 Tage Arbeit, aber erspart dir in Zukunft einiges an Qualen.

del_4901
2007-01-13, 14:28:10
warum nimmst du für XML kein Xerces?

Matrix316
2007-01-13, 17:49:07
Naja, aus Copyright Gründen wollte ich selbst was schreiben.

Trap
2007-01-13, 18:01:28
Naja, aus Copyright Gründen wollte ich selbst was schreiben.
Welche der Bedingungen der Apache Lizenz passt dir denn nicht?

Coda
2007-01-13, 18:03:15
Naja, aus Copyright Gründen

Wat? Xerces ist Apache licenced, da kannst damit machen was du willst solange du die Lizenz in der Distribution dazupackst.

ScottManDeath
2007-01-13, 19:27:52
Eventuell strcmp:

http://www.cplusplus.com/reference/clibrary/cstring/strcmp.html

Ich hab zuerst Java gelernt und dann C/C++. Und C++ ist bei den Strings wirklich pain in the ***, zumindest für Umsteiger.
Das meiste mache ich mittlerweile mit CString's der MFC die sind auf alle Fälle schonmal ein guter Ansatz.

Der C++ std::string hat eigentlich so alles was das Herz begehrt, wenns noch mehr sein darf, dann die boost string Algorithmen. MFC String ist nicht portabel und wer weiß wie lange MS noch MFC supported.....

Matrix316
2007-01-13, 19:29:00
Naja, bis ich mich da eingelesen habe, habe ich meinen eigenen Algorithmus schon längst fertig. ;) Außerdem ist das ganze für meine Zwecke etwas überdimensioniert.