All pastes #793853 Raw Edit

Something

public text v1 · immutable
·published 2007-11-22 17:53 UTC
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 &params)
{
    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;
}