Problem mit Vektor
-
- wenn du dein buffer-array schon 2000 Zeichen lang machst kannst du auch 1999 Zeichen mit getline() lesen lassen
2)str.push_back() wird nicht klappen, weil das Array keine push_back_methode hat.
3)benutz am besten strings und dann statt des 2D-vectors mit char einen vector<string>
-
So könnte man es z.B. machen:
#include <fstream> #include <iostream> #include <vector> #include <string> using namespace std; int main(int argc, char **argv) { ifstream ifs("tmp.txt"); if (!ifs) return 1; vector<string> vec; string str; //Einlesen while (!ifs.eof()) { getline(ifs, str, ' '); vec.push_back(str); } //Ausgeben vector<string>::iterator it = vec.begin(); for ( ; it != vec.end(); ++it) cout<<*it<<'\n'; return 0; };Wie du den Vektor durchsuchst, das findest jetzt aber selber raus: www.cppreference.com
-
Oder so:

#include <iostream> #include <iterator> #include <algorithm> #include <fstream> #include <vector> #include <string> using namespace std; int main(int argc, char **argv) { ifstream ifs("tmp.txt"); if (!ifs) return 1; vector<string> vec; copy( istream_iterator<string>(ifs), istream_iterator<string>(), back_inserter<vector<string> >(vec)); copy( vec.begin(), vec.end(), ostream_iterator<string>(cout,"\n")); return 0; }
-
Ein Hoch auf die STL, hehe :p
-
#include <fstream> #include <iostream> #include <vector> #include <string> using namespace std; int main(int argc, char **argv) { ifstream ifs("H:\\test4.txt"); if (!ifs) return 1; vector<string> vec; string str; //Einlesen while (!ifs.eof()) { getline(ifs, str, ' '); vec.push_back(str); } //Ausgeben vector<string>::iterator it = vec.begin(); for ( ; it != vec.end(); ++it) { //cout<<*it<<'\n'; } cout <<"DAS IST DER VEKTOR"<<" "<< vec[4]<<endl; int i; cin >> i; };Ich will jetzt die 3.Zeile ausgeben aus dem eingelesenen textfile.
Wie kann ich dem Vektor klarmachen, dass er zeilenweise einliest.
Besser gesagt, wie kann ich die einzelnen Zeilen ansprechen und ausgeben lassen?Danke,
Johannes
-
Wenn du willst das er Zeilenweise einliest musst du folgende Zeile:
getline(ifs, str, ' ');in
getline(ifs, str);ändern.
Dann wird Zeilenweise eingelesen.
mit
std::cout << vec[2] << std::endl;gibt er dann die 3 Zeile aus.
-
DANKE!

-
Danke soweit funktionierts.
Wie gebe ich nun das erste oder zweite Wort einer bestimmten Zeile aus?
lg
johannes
-
int pos1=vec[i].find(' '),pos2=vec[i].find(' ',pos1+1);//findet die ersten beiden Leerzeichen im String cout<<"1. Wort:"<<vec[i].substr(0,pos1-1)<<endl; cout<<"2. Wort:"<<vec[i].substr(pos1-1,pos2-pos1-1)<<endl;(oder du jagst den String durch einen Stringstream und liest ihn dort wortweise aus)
-
mein Problem ist, dass ich das textfile nach bestimmten schlüsselwörten filtern möchte.
diese stehen dann an erster oder auch an 3 stelle des files.
die zeilen in welchen die schlüsselwörter vorkommen an der stelle 1 oder 3 sollen dann in ein neues textfile gespeichert werden.
wäre für das das string stream besser vom handling her?
danke.
johannes
-
Nein, dafür bietet string die Memberfunktion find() mit zig Überladungen (Einzelbuchstaben, char*, andere Strings; Suche nur in Teilen,...) und Abwandlungen (find_first_of, find_last_not_of, rfind,...) an.
-
ok.
danke für den hinweis.
mal schauen.johannes