Zeilen nach Parameter durchsuchen
-
Hallo zusammen,
habe ein kleines Problem, aber die halten ja bekanntlich am meisten auf...
Ich habe eine Textdatei die ich nach einer Zahl durchsuchen möchte, z.B. 10.Diesen Wert lese ich vorher ein, weil ich immer mal was anders suchen möchte.
So sieht das Programm bisher aus:
#include <iostream> #include <fstream> #include <stdexcept> #include <stdio.h> #include <string.h> using namespace std; int main (void) { char line[256]; int test, test1 ; ifstream infile ("LZ.txt", ios::in); if (!infile) { cout << "Kein File :-(" << endl; return 1; } cout << "Welche Zahl suchen Sie ?\n\n" ; cin >> test ; while (infile.getline (line, 256)) { if (strstr( line, "N" ) && strstr( line, test, true )) { cout << line << endl; }else{ } } cin >> test1 ; cout << endl; return 0; }
Wie aber durchsuche ich ich die Zeile nach dem eingegebenen Parameter ? Habe bisher Zeilen immer mit strstr durchsucht, aber leider habe ich nix dazu gefunden ob dieser auch Parameter findet?
Vielleicht könnt ihr mir helfen?
-
strstr()
Vergleicht Strings (Array von char)
test ist bei dir aber einint
Mach aus test auch ein char-Array (wie line).
Dann sollte das klappen.
-
Danke schön...Hattest Recht war falsch deklariert...
-
Und benutze innerhalb von C++ bitte nicht char[] sondern string. Wenn Du cstring-Funktionen brauchst (für fremde Bibliotheken z.B.), dann solltest du <cstring> und nicht <string.h> inkludieren.
-
Langeweile und keine interessanten Fragen heute. Mal ein bisschen versuchen zu zaubern:
#include <iostream> #include <fstream> #include <string> #include <iterator> #include <algorithm> #include <functional> using namespace std; class line { string data; public: friend ostream& operator<<(ostream& out, const line& rhs) {return out << rhs.data;} friend istream& operator>>(istream& in, line &rhs) {return getline(in, rhs.data);} class is_in_line { string suchwort; public: typedef line argument_type; is_in_line(const string &suchwort): suchwort(suchwort) {} bool operator()(const line& line) const {return line.data.find(suchwort) != string::npos;} }; }; int main () { cout << "Welches Wort oder Zahl suchen Sie? "; string suchwort; cin >> suchwort; ifstream infile ("test.cc"); istream_iterator<line> end; istream_iterator<line> in_it (infile); ostream_iterator<line> out_it (cout,"\n"); remove_copy_if(in_it, end, out_it, not1(line::is_in_line(suchwort))); return 0; }
Dies ist die ganz streng C++98 konforme Version. Das gleiche mit copy_if, Lamdaausdrücken und wer weiß noch was, sei dem geneigten Leser als C++11-Übung überlassen.