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;
}