rendered paste body#include <iostream>#include <fstream>#include <list>#include <string>using namespace std;struct parameterezes { string minta; bool i; bool v; bool x; list<string> filenevek;};string StringToLower(string myString){ const int length = myString.length(); for(int i=0; i!=length; ++i) { myString[i] = tolower(myString[i]); } return myString;}void feldolgoz(parameterezes ¶ms){ if(params.filenevek.empty()) { string s; if(params.i){ params.minta=StringToLower(params.minta); } while(getline(cin,s)) { bool egyezes; string stemp=s; if(params.i){ s=StringToLower(s); } if(params.x) { egyezes=(s==params.minta); } else { egyezes=strstr(s.c_str(),params.minta.c_str()); } if(params.v) { egyezes=!egyezes; } if(egyezes) { cout<<stemp<<endl; } } return; } while(!(params.filenevek.empty())) { string s; fstream filestream; filestream.open(params.filenevek.begin()->c_str()); params.filenevek.pop_front(); while(getline(filestream,s)) { bool egyezes; string stemp=s; if(params.i){ s=StringToLower(s); } if(params.x) { egyezes=(s==params.minta); } else { egyezes=strstr(s.c_str(),params.minta.c_str()); } if(params.v) { egyezes=!egyezes; } if(egyezes) { cout<<stemp<<endl; } } }}int main(int argc, char *argv[]){ if(argc<2){ cout<<"Usage: "<<argv[0]<<" [OPTION]... PATTERN [FILE]..."<<endl; exit(0); } parameterezes params; params.i=false; params.x=false; params.v=false; if(argc>=2) { bool mintamegvan=false; for(int i=1;i<argc;i++) { if((argv[i][0]=='-') && !mintamegvan) { int j=1; while(argv[i][j]!='\0') { switch(argv[i][j]) { case 'i': params.i=true; break; case 'v': params.v=true; break; case 'x': params.x=true; break; default: cout<<"Hibas parameterezes!"<<endl; exit(1); } j++; } } else { if(!mintamegvan) { mintamegvan=true; params.minta=argv[i]; } else { params.filenevek.push_back(argv[i]); } } } } feldolgoz(params); return 0;}