Problem mit Vektor
-
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