String Zerlegen



  • In C kann ich ja etwas schon art "vorzerlegen" in den ich

    int Var1;
    char Var2;
    cin >> Var1 << Var2 <<...
    also z.B. aus 12-6... die integer rausziehen.

    aber wie zerlege ich jetzt in einer winapi den string aus meiner edit box so das mir nur noch die float o. int zahlen bleiben?



  • Wie sieht der string der im EditControl steht aus?
    Hat dieser ein bestimmtes Format?



  • int<>int ( <> als zeichen bei der eingabe 🙂 )
    bsp:
    -100<>100

    u. float x + float x + float

    bsp:

    3.2x+4.5x-6

    ^^ ( gemeint ist das zerlegen eines AnsiStrings aus einem TEdit objekt, um mal etwas genauer zu werden )



  • also falls du weißt wie der string aussieht könntest du es mit sscanf machen.

    int zahl1;
    int zahl2;
    
    sscanf (buffer,"%s<>%d",&zahl1,&zahl2);
    

    Davor natürlich buffer füllen.

    Wenn du verschiedene mögliche Eingaben hast müsstest du erst entscheiden wie du den String aufteilst.



  • Hmm
    C++: char-Array von GetWindowTextLength anlegen und mit GetWindowText den Text holen. Dann einen std::ostringstream mit den Daten befüllen, char-Array wieder freigeben. Jetzt kannst du mit dem operator>> usw. wie bei std::cin die Daten auswerten.
    Oder du packst es in einen String und nimmst einfach find oder find_first_of usw ...



  • zu Knob,

    würde er wenn ich %fx+%fx-%f schreibe auch noch die zahlen erknennen wenn ich schreibe 2x+3.2x+4

    zu Evil,

    Oo okay.. mein borland kennt nichtmal die klasse u. auch nicht die bibliothek die mir die msdn sagt.



  • du meinst wegen dem + in dem einen und dem minus in dem anderen... das würde er nicht erkennen...

    Versuch es vielleicht so:

    char buf1[10];
    	char buf2[10];
    
    	int zahl1;
    	int zahl2;
    	int zahl3;
    
    	sscanf (buffer,"%fx%s%fx%s%f",&zahl1,&buf1,&zahl2,&buf2,&zahl3);
    

    ist zwar nicht elegant... sollte aber funktionieren. Habs allerdings nicht getestet.



  • Ehm wenn der das nicht kennt ... dann solltest du deinen Compiler in die Tonne klatschen 😃 Das ist der C++-Standard ...

    #include <sstream>
    #include <windows.h>
    
    const std::size_t len(::GetWindowTextLength(hWnd) + 1);
    TCHAR* string = new TCHAR[len];
    ::GetWindowText(hWnd, string, len);
    std::basic_istringstream<TCHAR> ss(string);
    delete [] string;
    
    // Jetzt stehen deine Daten in ss. Kannst du (fast) so nutzen wie std::cin :)
    double value1(0.0);
    ss >> value1;
    

    usw ...



  • nagut war nen bisschen schlecht formuliert, die dokumentation des borlands kennt die nicht.

    aber danke danke danke 🙂


Anmelden zum Antworten