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