String zwischen 2 anderen Strings
-
Die Methode substr von einem string?
-
und dann schneiden.
Wie schneiden

-
substr schreibt doch entweder ab einen punkt den Rest oder ab einen Punkt eine bestimmte anzahl von zeichen.
Wenn er das in vorfeld immer weis kann er das ja auch so machen, Ich würde aber wohl eher rausfiltern.mfg Michael
-
if (bufferstring.find("ICY-META") != string::npos) { big_string = bufferstring.size(); // größe ermitteln pos_one = bufferstring.find("'"); // estes zeichen finden position ermitten bufferstring.erase(0,pos_one + 1); // Abschneiden teil string von vorne pos_two = bufferstring.find(";"); // zweites zeichen suchen bufferstring.erase(pos_two - 1); // rest abschneiden pthread_mutex_lock (&radiomutex); interpret_title = bufferstring; pthread_mutex_unlock (&radiomutex); }hier mal ein beispiel der einen aus einem stream den titel rausgibt der stream sieht so aus
@I ICY-META: StreamTitle='RAMMSTEIN - DU RIECHST SO GUT';StreamUrl='http://www.dieneue1077.de';und das ergebnis so
RAMMSTEIN - DU RIECHST SO GUTes kann der string immer unterschiedlich lang sein es wird passend geschnitten
habe mal den code nacherklärtmfg Michael
-
#include <iostream> #include <string> std::string StringBetween(const std::string& input, const std::string& left, const std::string& right) { size_t posLeft, posRight; posLeft = input.find(left); posRight = input.find(right); if (posLeft == std::string::npos || posRight == std::string::npos) { return ""; // Nicht gefunden } posLeft += left.length(); return input.substr(posLeft, input.length() - right.length() - left.length()); } int main() { std::cout << "'" << StringBetween("<img>The image stuff...</img>", "<img>", "</img>") << "'" << std::endl; return 0; }
-
es gibt da noch ein Problem...
string mystring = "<img>heyho</img>irgendeintext"; string ergebnis = StringBetween(mystring, "<img>", "</img>"); cout << ergebnis << endl; system("pause");Der Rückgabewert ist: heyho</img>irgendeintext
Irgendwas ist da falsch...
mfg
@night@
-
uuuuuuuuuuuuuuuu schrieb:
#include <iostream> #include <string> std::string StringBetween(const std::string& input, const std::string& left, const std::string& right) { size_t posLeft, posRight; posLeft = input.find(left); posRight = input.find(right); if (posLeft == std::string::npos || posRight == std::string::npos) { return ""; // Nicht gefunden } posLeft += left.length(); return input.substr(posLeft, input.length() - right.length() - left.length()); } int main() { std::cout << "'" << StringBetween("<img>The image stuff...</img>", "<img>", "</img>") << "'" << std::endl; return 0; }Du hast das posRight nicht verarbeitet. Und was ist, wenn posRight < posLeft ist? Also z. B. in "</img>foo<img>".
Auf der anderen Seite hat @night@ ja jetzt den Ansatz. Das Bugfixing sollte nicht mehr so schwer sein.
-
heyho.
ich hab jetzt mal versucht posRight negativ abzutrennen.string ergebnis2 = ergebnis1.substr((-posRight), 1);Nur mal so zum probieren. Die idde hab ich von hier(1.Link-->aus irgendeinem Grund kann man das net verlinken -.-)
Aber auf diese Weise stürzt entweder das Programm ab, oder der Compiler will den Code nicht kompillieren...
Gibt es noch iregendeine Möglichkeit von der anderen Seite des Strings Buchstaben abzuschneiden???
mfg
@night@
-
ich habs jetzt hingekriegt...
string StringBetween(const string& input, const string& left, const string& right) { size_t posLeft, posRight; posLeft = input.find(left); posRight = input.find(right); if (posLeft == string::npos || posRight == string::npos) { return ""; // Nicht gefunden } posLeft += left.length(); posRight += right.length(); string ergebnis1 = input.substr(posLeft, input.length() - right.length() - left.length()); int formel = (input.find(right) - posLeft); string ergebnis2 = ergebnis1.substr(0, formel); return ergebnis2; }mfg
@night@
-
string string_to_cut (string bufferstring , string begin , string end , int number_of_a , int number_of_b) { int big_string , pos_one , pos_two; big_string = bufferstring.size(); if (bufferstring.find(begin) != string::npos) {pos_one = bufferstring.find(begin);bufferstring.erase(0,pos_one+number_of_a);} else {bufferstring.erase(); errorwrite("string begin","string_to_cut");} if (bufferstring.find(end) != string::npos) {pos_two = bufferstring.find(end);bufferstring.erase(pos_two-number_of_b);} else {bufferstring.erase(); errorwrite("string end","string_to_cut");} begin.erase(); end.erase(); return bufferstring; }spricht doch auch nichts gegen oder ?
klappt zumindest