String zerlegen



  • Ich möchte einen String zerlegen, wo Werte durch Tabs getrennt sind.
    Ein String sieht dann z.B. so aus:
    Hans 14 25841 Husum Sonnenstrasse16
    Ich möchte diesen String zerlegen und in einen Array speichern.Gibt es dafür einen Weg ausser über die regex++-Bibliotheken die man sich ja seperat downloaden kann?

    [Edit]
    Suchfunktion ist ja leider deaktiviert...



  • Hallo,

    ja, ich bevorzuge ja stringstreams:

    #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    
    const int MAX = 20;
    
    int main()
    {
            string String = "dies   ist     ein     test";
            stringstream complete;
            char part[MAX];
    
            complete << String;
    
            while(complete.getline(part, MAX, '\t'))
                    cout << part << endl;
    }
    


  • Danke, dass funktioniert super.Ich habe dies nun weitergeführt und habe das mit einer Datei ausprobiert.Die *.txt Datei sieht so aus.

    1   Angriff1   15    30
    2    Angriff2    7    13
    

    Der Code funktioniert dann natürlich nicht mehr so wie er soll, da ja eine newline da ist.Wie kann ich dieses Probleme beheben?
    Ich habe diese Ausgabe beabsichtigt:

    Angriff-Id: 1
    Name: Angriff1
    Damage: 15-30
    
    Angriff-Id: 2
    Name: Angriff2
    Damage: 7-13
    

    Aber tatsächlich rauskommen tut das hier.

    Angriff-Id: 1
    Name: Angriff1
    Damage: 15-30
    2
    
    Angriff-Id: Angriff2
    Name: 7
    Damage: 13-
    

    ^^ Da hat sich wohl was verschoben.Meine Idee wäre, alle newlines im Code durch Tabs zu ersetzen, allerdings scheitert es bei mir schon daran... 🙄



  • Hallo,

    tja, keine Ahnung wie du das machst. Ich hab mal was zusammengehackt:

    #include <iostream>
    #include <sstream>
    #include <string>
    #include <fstream>
    #include <vector>
    
    using namespace std;
    
    const int MAX = 200;
    
    struct attack{
            char id[10];
            char name[MAX];
            char damage[10];
    };
    
    int main()
    {
            ifstream file("test.txt");
            string tmp;
            char temp[MAX];
            char part[MAX];
    
            vector<attack> vecAttack;
    
            while(file.getline(temp, MAX))
            {
                    stringstream complete;
                    complete << temp;
    
                    attack Attack;
                    complete.getline(Attack.id, MAX, '\t');
                    complete.getline(Attack.name, MAX, '\t');
                    complete.getline(Attack.damage, MAX, '\t');
                    vecAttack.push_back(Attack);
            }
            cout << "Angriff - ID: " << vecAttack[0].id << endl;
            cout << "Name: " << vecAttack[0].name << endl;
            cout << "Damage: " << vecAttack[0].damage << endl << endl;
    
            cout << "Angriff - ID: " << vecAttack[1].id << endl;
            cout << "Name: " << vecAttack[1].name << endl;
            cout << "Damage: " << vecAttack[1].damage << endl << endl;
    }
    

    Das ist alles andere als optimal, aber evtl. hilfts ja. Gute Nacht 🙂


Anmelden zum Antworten