String spalten



  • Hallo!
    Ich suche eine Funktion, mit der ich den String
    string befehl;
    befehl = "blabla blibli";
    auf einen string
    x = blabla
    und einen string
    y = blibli
    teilen kann.
    Hab zwar schon mit Google gesucht aber nur Lösungen mit Arrays gefunden...

    Ich danke für die Hilfe!
    Ach ja, es handelt sich um C++ und Linux!



  • vieleicht hilft dir das weiter

    http://www.cppreference.com/cppstring/substr.html



  • Nein. Die zwei Wörter müssen nicht gleichlang sein. Es kann auch sein, dass der string befehl = "ag sadfhasuhsdfuhsdfusfhsdfh" ist. Es muss also explizit beim Leerschlag getrennt werden.
    Danke trotzdem.



  • du kannst dich doch auch einfach durch den string hangeln und mitzählen wieviele schritte du zum leerzeichen brauchst. dann weist du, wo du abschneiden musst.



  • Ebenfalls nein, weil ich mir den String aus einem File so reinhol:

    while (! scripts.eof() ) //while script hat ende nicht erreicht
     {
     getline (scripts,line);
     ...
    }
    

    line ist dann mein String. Das File (scripts) ist so aufgebaut:
    date date.sh
    setip setip.sh
    getdns getdns.sh

    usw., wobei das zweite Wort nicht das erste wort+.sh sein muss.

    Lg



  • wieso sollte das nicht gehen. Ich verstehe das Problem nicht. Ob da nun eine vorgefertige funktion an der stelle kommt, oder deine ist doch egal.



  • Ach sorry, ich hab deinen Post falsch verstanden. Meinte du willst schon beim einlesen die Zeichen zählen.
    Geht das denn nicht einfacher? Muss ich wirklich den String in einen Array umwandeln und jedes Zeichen mit ner For-Schleife durchgehen?
    Ich hätte geschworen es gibt schon sowas... aber naja 🙂



  • du musst das nicht in ein array umwandeln. du kannst auf die einzelnen zeichen in einem string so zugreifen:

    string test = "Hallo";
    cout << test[0] << endl;  //Ausgabe: H
    


  • Ach ja, stimmt. Ich hab das jetzt so:

    if (scripts.is_open())
    {
     while (! scripts.eof() ) //while script hat ende nicht erreicht
     {
     getline (scripts,line);
    
     int leerzeichen=1000;
     for (int i=0; i < sizeof(line); i++)
     {
     if (line[i] == " ")
       leerzeichen = line[i];
     else
     {
       if ( i > leerzeichen)
       scriptname[i] = line[i];
       else
       file_befehl[i] = line[i];
     }
     }
    

    Ist aber nicht so schön und funktioniert auch nicht:

    step3.cpp:52: Fehler: ISO-C++ verbietet Vergleich zwischen Zeiger und Ganzzahl

    Ich kompiliere mit gcc...



  • Was spricht gegen:

    // Die Funktion trennt den String line am ersten Leerzeichen auf und gibt ein pair mit den beiden Hälften zurück
    std::pair<std::string, std::string> split(const std::string& line)
    {
        // find liefert die Position des ersten Leerzeichens
        std::string::size_type position = line.find(' ', 0);
        // Falls Leerzeichen nicht gefunden wurde
        if(position == std::string::npos)
        {
            // irgendeine Exception werfen
        }
        else
        {
            // Pair bilden mit der ersten Hälfte vom Anfang bis zur Position und der zweiten Hälfte von der Position bis zum Ende
            return std::make_pair(line.substr(0, position), line.substr(position));
        }
    }
    

    ungetestet



  • return std::make_pair(line.substr(0, position), line.substr(position[b]+1[/b]));
    

    sonst ist das leerzeichen noch im zweiten teil.



  • Wenn es immer nur ein Leerzeichen ist, kann man doch auch mittels eines Stringstreams trennen.

    stringstream str(line);
    string str1, str2;
    str >> str1 >> str2;
    

Anmelden zum Antworten