Genauere char- Manipulation & Vergleich



  • Hallo,
    ich hab einpaar Fragen zur Manipulation von char- Arrays:

    - wie kann man ein Zeichen in große oder kleine umwandeln oder wie kann man den ganzen String in Große bzw. kleine buchstaben umwandeln (in Perl gibt es dafür ein Steuerzeichen, z.B. \u oder \U)?

    - wie erstelle ich eine etwas komplexere if- Anweisung, also ich mein jetzt sowas: if (Gegebenfalls_was_anderes+"Hallo"+"Gegebfalls_wasanderes). Die if- Anweisung würde dann bei folgenden Strings ausgeführt werden: "Hallo", "Hey Hallo", "Hallo altes Haus!", "Hey Hallo altes Haus!"

    - wenn ich beispielsweise versuchen würde, eine Script- Sprache zu entwickeln, wie realisiere ich das, dass am Ende der Anweisung ";" steht und die Sprache auch Whitespaces unterstützen sollte?



  • - toupper, bzw. tolower

    // wildcmp: Funktion zum Vergleichen von 2 Strings mittels Wildcards
        int wildcmp(const char* wild, const char* string) {
            const char *cp, *mp;
            while((*string) && (*wild != '*')) {
                if((*wild != *string) && (*wild != '?'))
                    return 0;
                ++wild;
                ++string;
            }
            while(*string) {
                if(*wild == '*') {
                    if(!*++wild)
                        return 1;
                    mp = wild;
                    cp = string + 1;
                }
                else if((*wild == *string) || (*wild == '?')) {
                    ++wild;
                    ++string;
                }
                else {
                    wild = mp;
                    string = ++cp;
                }
            }
            while (*wild == '*')
                ++wild;
            return !*wild;
        }
    

    - Hääää, meinst du einen Parser???

    [ Dieser Beitrag wurde am 30.03.2003 um 18:37 Uhr von MaSTaH editiert. ]



  • cool und wie verwende ich denn jetzt wildcmp()?

    P.S.: Ich meine wenn der Benutzer ";" eingibt, dass man testet, ob dieses Zeichen am Schluss eingegeben wurde



  • ad 1) du verwendest

    char c[] = "Hello World";
    use_facet<ctype<char> > (cout.getloc()).to_upper(c, c+10);
    cout << c << endl;
    

    (to_upper heißt bei MSVC toupper)

    ad 2)
    mit string (= basic_string<char> ) aus <string>:

    #include <string>
    std::string x = "Das ist ein Hallo-Gruß";
    if (x.find("Hallo") != std::string::npos) {
      /*bla*/
    }
    

    ad 3) - du abstrahierst. die unterste ebene bildet der Zeichen-für-Zeichen-Parser. er liefert ein Token nach dem anderen und ließt Zeichen für Zeichen. er muss einfach erkennen, wann das nächste token anfängt.



  • Original erstellt von pAngel:
    **cool und wie verwende ich denn jetzt wildcmp()?
    **

    ? steht für unbekanntes Zeichen und * für unbekannte Zeichenfolge

    int res = wildcmp("Ha?lo*", "Hallo du da"); // liefert z.B. eine 1;
    res = wildcmp("Haddd?lo*", "Hallo du da"); // liefert z.B. eine 0;



  • genial. 🙂
    Nur eine Frage bleibt offen. Was ist wenn im String ein richtiges Fragezeichen oder richtiger Stern vorkommt? 🙂
    Da bau ich mir wahrscheinlich (muss ich ja wohl) noch Steuerzeichen ein: "Hallo \**", "Hallo *ppp!"

    Danke für eure Hilfe! 😉


Anmelden zum Antworten