This assignment involves writing a C program to identify and
Solution
Code:
#include<iostream>
 #include<string>
 #include<fstream>
 #include<cstring>
 using namespace std;
 #include<ctype.h>
class Count{
string *files;
 int *lc;
 int *wc;
 int *cc;
 int size;
 int tc,tw,tl;
public:
 Count(){ }
 Count(string *f,int n){
    size=n;
    files = new string[n];
    for(int i=0;i<n;i++)
        files[i].assign(f[i]);
   lc= new int[n];
    wc = new int[n];
    cc=new int[n];
    tc=tw=tl=0;
 }
void countAll(){
 
 for(int i=0;i<size;i++){
    ifstream ifs(files[i].c_str());
    if(!ifs.is_open()){
        cout<<\"Error in opening the file:\"<<files[i]<<endl;
        return;
    }
    int l=0,w=0,c=0;
    char ch;
   while(ifs.get(ch)){
        if(isalnum(ch))
            c++;
        if(ch==\' \')
            w++;
        if(ch==\'\ \'){
            l++;w++;
        }
    }
   ifs.close();
   
    lc[i]=l;
    wc[i]=w;
    cc[i]=c;  
   tl+=l;
    tw+=w;
    tc+=c;
}
}
void printCount(){
    for(int i =0;i<size;i++)
        cout<<lc[i]<<\" \"<<wc[i]<<\" \"<<cc[i]<<\" \"<<files[i]<<endl;
   cout<<tl<<\" \"<<tw<<\" \"<<tc<<\" total\"<<endl;
 }
void findChar(char m){
int totalLines=0,totalWords=0,totalChars=0;
   for(int i=0;i<size;i++){
        ifstream ifs(files[i].c_str());
   
        if(!ifs.is_open()){
            cout<<\"Error in opening the file\"<<endl;
            return ;
        }
int lines=0,chars=0,words=0;
       char ch;
        char lineflag=false,wordflag=false;
        while(ifs.get(ch)){
            if(ch==\'m\'){
                lineflag=true;
                wordflag=true;
                totalChars++;
                chars++;
            }
            if(ch==\' \' &&wordflag){
                wordflag=false;
                totalWords++;
                words++;
            }
           if(ch==\'\ \' && lineflag) {
                totalLines++;  
                lineflag=false;
                lines++;
            }
        }
        ifs.close();
       cout<<m<<\":\"<<lines<<\" \"<<words<<\" \"<<chars<<\" \"<<files[i].c_str()<<endl;
    }
cout<<m<<\":\"<<totalLines<<\" \"<<totalWords<<\" \"<<totalChars<<\" \"<<\"total\"<<endl;
}
void findWord(string &word){
for(int i=0;i<size;i++)
 {
    ifstream ifs(files[i].c_str());
   if(!ifs.is_open()){
        cout<<\"Error in opening the file\"<<endl;
        return ;
    }
   string tt;
    int wordCount=0;
    int lineCount=0;
    bool lineFlag=false;
    string ss;
    char ch;
   while(ifs.get(ch)){
        if(ch==\' \'){
            if(word.compare(ss)==0){
                wordCount++;
                lineFlag=true;
                ss.clear();
            }
        }
        if(isalnum(ch)) ss.append(1,ch);
       if(ch==\'\ \' && lineFlag){
            lineFlag=false;
            lineCount++;
        }
    }
   
    ifs.close();
    cout<<word<<\" \"<<wordCount<<\" \"<<lineCount<<\" \"<<files[i]<<endl;  
 }
 }
 };
void Usage(){
    cout<<\"count [-findchar=] [-findword=] [file1] [file2]....\"<<endl;
 }
int main(int argc,char *argv[]){
if(argc==1){
    Usage();
    return 0;
 }
bool findchFlag=false,findwFlag=false;
 char findch;
 char findw[20];
 string name[20];
 int fileCount=0;
 char ch;
 string word;
 
 for(int i=1;i<argc;i++)
 {
    if(strstr(argv[i],\"-findchar\")!=0)
    {
        int len=strlen(argv[i]);
       
        ch=argv[i][len-1];
        findchFlag=true;
    }
    else if(strstr(argv[i],\"-findword\")!=0)
    {
        cout<<argv[i]<<endl;  
        char *tt=strtok(argv[i],\"=\");
        tt=strtok(NULL,\"=\");
        word.assign(tt);
        findwFlag=true;
    }
    else
        name[fileCount++].assign(argv[i]);
 }
Count myCount(name,fileCount);
myCount.countAll();
 
 cout<<\"Files data information:\"<<endl;
 myCount.printCount();
if(findchFlag){
    cout<<\"Finding char : \"<<ch<<\" in file(s)\"<<endl;
    myCount.findChar(ch);
 }
 if(findwFlag){
    cout<<\"Finding word : \"<<word<<\" in file(s)\"<<endl;
    myCount.findWord(word);
 }
return 0;
 }
Output:
Files data information:
 3 10 47 tmp.txt
 3 10 54 tmp2.txt
 6 20 101 total
 Finding char : m in file(s)
 m:2 3 4 tmp.txt
 m:3 4 6 tmp2.txt
 m:5 7 10 total




