Explode und List



  • Hi,

    Es gibt in C++ sicher sowas wie Explode und list...

    PHP Beispiel:

    list($user,$pwd) = explode("#");
    

    Wie funktioniert das in C++ genau?
    (oder welche Header Datei brauch ich wenn das obere scon richtig is *g*)

    Und wie kann ich folgendes machen:

    Der user schreibt z.B

    oua("Hallo");

    in nen string

    Ich will nun das ich den Paramter weiss (in dem falle "Hallo") und den dazugehörigen Befehl,

    Wie kan ich dies tun? 🙂

    Machts gut,
    Stefan



  • Es gibt in C++ sicher sowas wie Explode

    Ja. Wenn du selbst schreibst 🙂

    Hier mal eine simple Version:

    #include <algorithm>
    #include <string>
    #include <iostream>
    using namespace std;
    int Explode(const string& str, vector<string>& Result, const string& exstr)
    {
        string::size_type Pos = 0;
        string::size_type Pos2 = 0;
        int Substrings = 0;
    
        while ( (Pos2 = str.find(exstr, Pos)) != string::npos)
        {
            Result.push_back(str.substr(Pos, Pos2 - Pos));
            ++Pos2;
            Pos = Pos2;
            ++Substrings;
        }
        Result.push_back(str.substr(Pos, Pos2 - Pos));
        return ++Substrings;
    
    }
    
    int main(int argc, char* argv[])
    {
        string Str = "Hallo#Welt#Hallo#Fred";
        vector<string> Res;
        Explode(Str, Res, "#");
        copy (Res.begin(), Res.end(), ostream_iterator<string>(cout, "\n"));
    }
    

    Den zweiten Teil deiner Frage verstehe ich nicht.



  • Also so eine Art eigene Programmiersprache

    Wenn links = "befehl(\"" dann
    Wenn rechts = \");" dann ermittle was zwischen " und " steht...

    Ich hoffe jetzt verstehst du es etwas besser 🙂



  • Hi,

    deine eigene Sprache... Das ist nicht ganz trivial.

    Stell dir vor der User schreibt anstatt
    befehl("Hallo")

    einfach

    befehl ( "Hallo" )

    weil er es so für besser Lesbar hält.

    Suchst du jetzt nach "befehl(\"" hast du schon verloren.

    Oder du sagst ihm, er darf keine zusätzlichen Leerzeichen verwenden. Sehr Unser-Unfreundlich.

    Wenn es nur um ganz einfache Scripte geht, so nach dem Motto: Befehl, Parameter solltest du vielleicht eine etwas einfachere "Syntax" verwenden, vielleicht sowas:

    Befehl1: Parameter
    Befehl2: Parameter1, Parameter2

    Das lässt sich sehr einfach auseinandernehmen, und du brauchst keinen Scanner, Tokenizer, Parser zu schreiben.



  • Hab sowas auch schon mal benötigt um Dozenten aus einer Textdatei einzulesen.

    int read(vector<string> &doz,string *src)
    {
       int i=0,pos=0;
       do doz.push_back(src->substr(pos,src->find(';',pos)-pos));
       while((++pos+=doz[i].length())&&++i&&i<count(src->begin(),src->end(),';'));
       return i;
    }
    

Anmelden zum Antworten