substring -> char



  • Hi Zusammen

    Ich hab folgendes Problem:

    Ich habe einen string eingabe und einen substring partEingabe.

    Der substring wird definiert duch:

    #include <string>
    using namespace std;
    
    string partEingabe = eingabe->substr(5, 1);
    

    nun möchte ich mit einer switch anweisung den partEingabe string auf bestimmte Zeichen überprüfen. Leider funktioniert dies mit dem Datentyp string nicht.

    Wie bringe ich den substring (1 Zeichen) in ein "char tryZeichen"

    Danke und Gruss
    TTS



  • Indem du dir nur ein Zeichen aus dem string holst. Zum Beispiel über die Methode at() .

    http://www.cppreference.com/wiki/string/basic_string/at



  • Hi,

    lass das substr weg und hol dir direkt den char mit

    char tryZeichen = eingabe->at(5);
    // oder
    char tryZeichen = (*eingabe)[5];
    

    Vorher aber noch die Länge abfragen, ob 'eingabe' überhaupt lang genug ist.



  • Jockelx schrieb:

    Hi,

    lass das substr weg und hol dir direkt den char mit

    char tryZeichen = eingabe->at(5);
    // oder
    char tryZeichen = (*eingabe)[5];
    

    Vorher aber noch die Länge abfragen, ob 'eingabe' überhaupt lang genug ist.

    Danke hat geklappt 😃



  • Jedoch komme ich schon zum nächten Problem, das ich nicht verstehe.

    Das ganze vorhin war nur etwas PseudoCode. Hier ist die richtige Verwendung.

    Ich möchte, wenn eine Switch anweisung zutrifft dem "string *delayCounterValue" einen wert zuweisen z.B. "0..488"

    Funktion:

    bool CTransitObserver::Observe(string *receivedData, unsigned long *numberOfBytesReceived, string *bitError, string *delayCounterValue)
    

    Switch:

    if (bytesReceived >= 1)
    	{
    		*bitError = receivedData->substr(0,4);
    		char switchData = receivedData->at(5);
    
    		switch(switchData)
    		{
    		case 0:
    		*delayCounterValue = "0..488";
    		break;
    
    ...
    

    Das scheint alles zu Funktioneren. Jedoch im main, wo der *delayCounterValue ausgegeben werden soll, passiert einfach nichts. Ich habe keine Ahnung was das Problem ist -.-

    Ich hoffe ihr wisst weiter.

    Danke



  • Was heißt es scheint zu funktionieren? Nimm den Debugger und schau nach, ob es so funktioniert, wie es soll. Und schau dir mal Referenzen an. Ich glaub nicht, dass du einen Zeiger auf deine strings benötigst.



  • Nick Unbekannt schrieb:

    Was heißt es scheint zu funktionieren? Nimm den Debugger und schau nach, ob es so funktioniert, wie es soll. Und schau dir mal Referenzen an. Ich glaub nicht, dass du einen Zeiger auf deine strings benötigst.

    Mit es scheint zu funktionieren, meine ich, dass der Compiler nicht reklamiert. Jedoch sollte es mir den zugewiesenen Wert auch ausgeben und in ein LogFile eintragen. Diese beiden Dinge funktionieren aber nicht.

    Hmm.. habs zuerst ohne Pointer versucht habs nicht hinbekommen. Diese Variablen sind im Main.cpp erstellt worden und im transitObserver.cpp einen Wert zugewiesen. Ich hab keine Ahnung wie dies ohne Pointer funktionieren soll.



  • TTS schrieb:

    Mit es scheint zu funktionieren, meine ich, dass der Compiler nicht reklamiert. Jedoch sollte es mir den zugewiesenen Wert auch ausgeben und in ein LogFile eintragen. Diese beiden Dinge funktionieren aber nicht.

    Deswegen kann man ja mit einem Debugger den Programmablauf verfolgen. Wenn dir der Debugger, warum auch immer, unlogisch erscheint, dann kannst du auch an alle relevanten Stellen ein printf schreiben und dir die Position und ggf. ein paar Variablen ausgeben lassen. Du musst dann nur noch schauen, ob die Reihenfolge und Inhalte deinen Erwartungen entspricht. Das macht aber alles auch der Debugger und noch vieles mehr.

    TTS schrieb:

    Hmm.. habs zuerst ohne Pointer versucht habs nicht hinbekommen. Diese Variablen sind im Main.cpp erstellt worden und im transitObserver.cpp einen Wert zugewiesen. Ich hab keine Ahnung wie dies ohne Pointer funktionieren soll.

    Mit Referenzen! Statt dem Stern * für Zeiger nutzt du ein Und &. Damit kannst du auf den String ohne Dereferenzierung zugreifen, arbeitest aber trotzdem nicht auf einer Kopie. Und es kann auch nicht passieren, dass du ein nicht-string derefenzierst.



  • Hat sich erledigt:

    Fehler:

    case "A":
    ...
    break;
    

    statt

    case 'A':
    ...
    break;
    

Anmelden zum Antworten