Text-DEBUG-Ausgabe als Bedingung (if-else) teilweise kopieren/übernehmen
-
Hallo,
Ich habe eine Frage:
im laufe meines Programms habe ich unter anderem folgendes stehen:
cout << msg << endl;Wenn ich das Programm laufen lasse, dann bekomme ich bei der Ausführung in der "Konsole" folgendes ausgegeben:
ms01-BEoder
ms01-UGSoder ....
Ich will im Code eine if-Abfrage nach dem Motto:
if (*****BE) { tue dies }
if (*****UGS) {tue das}d.h. ich will im Quellcode aus "msg" heraus es auslesen können UND ZWAR nur die stellen ab dem 6tem Zeichen.
Hat jemand mal eine Idee wie ich es in C++ machen kann?
Danke für die Hilfe im Voraus
-
Verwende eine der
compareÜberladungen:
http://www.cplusplus.com/reference/string/string/compare/Grüssli
-
erstmal danke für die schnelle Antwort.
D.h. ich kann in meinem Fall "msg" als ein String in compare-Funktion einfach so verwenden?
als z.b.:
if (msg.compare(6,3,"ugs") == 0)
{ tue etwas }
-
und noch was.
Gibt es eine andere Möglichkeit (ohne Funktionen der stdlib) ?
Gibt es da vielleicht einen Umweg?Wie kann ich im Quellcode direkt auf die cout Ausgabe von "msg" zugreifen, wenn es "intern" im Code nicht als ein anderer eigens Definierter Datentyp ist.
-
Nicht ganz, schau dir mal dieses Beispiel an:
#include <string> #include <iostream> int main() { std::string test1 = "hello world"; std::string test2 = "hello world!"; if(test1.compare(6, 5, "world") == 0) { std::cout << "test1 ends with world" << std::endl; } if(test2.compare(6, 5, "world") == 0) { std::cout << "test2 ends with world" << std::endl; } std::cin.get(); return 0; }Ausgabe:
test1 ends with world test2 ends with worldGrundsätzlich nicht korrekt. Daher verwende lieber std::string::npos als zweites Argument. So wird der ganze restliche String zum Vergleich hinzugezogen:
#include <string> #include <iostream> int main() { std::string test1 = "hello world"; std::string test2 = "hello world!"; if(test1.compare(6, std::string::npos, "world") == 0) { std::cout << "test1 ends with world" << std::endl; } if(test2.compare(6, std::string::npos, "world") == 0) { std::cout << "test2 ends with world" << std::endl; } std::cin.get(); return 0; }Ausgabe:
test1 ends with worldGrüssli
-
ich habe es eben ausprobiert :
if (!msg.compare(5, 3, "UGS")) { tue etwas }und leider macht der compiler nicht mit
...Fehler: Abfrage des Elementes »compare« in »msg«, das vom Nicht-Klassentyp »Ieee802*« ist
natürlich habe ich vorher
#include <string>
hinzugefügt
Ich glaube hier brauche ich eine "andere" Möglichkeit, wenn es denn diese gibt
... ein UMWEG 
-
Oh, tut mir Leid. Da wir hier im C++ Forum sind, habe ich angenommen, dass msg vom Typ
std::stringist. Aber dem scheint nicht der Fall zu sein. Was ist das für ein Typ? Aus welcher Bibliothek?Ieee802ist jedenfalls kein Standard C++ Typ.Und was ist das für eine seltsame Fehlermeldung? Welchen Kompiler benutzt du?
Grüssli
-
also der Typ ist zu speziell um es hier deutlich auszuführen.
ich verwende schon den neuesten Compiler (arbeite unter Ubuntu)
also gibt es keine Möglichkeit das ich im Quellcode direkt auf die "spätere" cout Ausgabe "in Text/String-Form" irgendwie dran kommen kann, ohne etwas includieren zu müssen bzw. stdlib zu verwenden?
in jedem Fall, danke für die Hilfe!!!
-
Michi8080 schrieb:
ich verwende schon den neuesten Compiler (arbeite unter Ubuntu)
ubuntu ist ein compiler?
also gibt es keine Möglichkeit das ich im Quellcode direkt auf die "spätere" cout Ausgabe "in Text/String-Form" irgendwie dran kommen kann, ohne etwas includieren zu müssen bzw. stdlib zu verwenden?
äh? wie jetzt? wenn du den text per cout ausgibst, dann verwendest du doch schon die standardbibliothek?
gib den string doch einfach deiner parser-funktion statt ihn auszugeben, dann musst du ihn nicht aus der ausgabe fischen.
-
also klar das ubuntu kein compiler ist.
ich nutze : gcc (Ubuntu 4.3.2-1ubuntu12) 4.3.2
Also ich habe leider bis jetzt noch nie mit parser-funktionen gearbeitet

Also nochmal das Problem:
ich habe einen "besonderen" Datentyp BLA. Ich habe ein "Objekt" von BLA der heißt "msg". "msg" wird intern im Programm unterschiedlich belegt "ms**-****"
wenn ich
cout << msg << endl;ausführe dann bekomme ich als Ausgabe im Programm z.B: "ms01-BE" raus.
Was ich will:
ich will das ich im Code IRGENDWIE an den Inhalt von "msg" drankomme und ab der 5ten-Stelle vergleichen kann, so das ich z.b. folgende if-Abfrage erstellen kann :
if (msg = ms01-BE) {tue etwas} if (msg = ms01-UGS) {tue etwas anderes}wenn es eine Möglichkeit mit Parser-Funktionen gibt, könntest du mir vielleicht an einem einfachem Bsp. zeigen wie es geht???
-
void parse(string const & message) { // hier das rein was dravere vorgeschlagen hat } parse(msg); // vor jeder ausgabe dein parse() aufrufen cout << msg << endl;
-
also der Typ ist zu speziell um es hier deutlich auszuführen.
dann wirste hier auch keine hilfe finden...
entweder, du sagst uns, welchen typ du verwendest (zur not auch nen link) oder du sagst, wie die schnittstelle zu std::string bzw const char* ist...dann kannste so was machen:
std::string tmp = deinstring.magic_c_str_fkt(); //siehe draveres vorschlag...ich seh gerade, dass scho jmd ca. das selbe gesagt hat, aber naja... ^^
bb