String Operations using Operator Overloading (C++)

/*write a program to perform string operations    = equality    == string copy    + concatenation    >> reverse    << display    palindrome function    function to find occurence of substring    use operator overloading*/        #include<iostream>    #include<string.h>    #include<iomanip>    using namespace std;    class strings  {      char str[100];            public:            void getdata()            {          cout<<"enter string\t";                cin>>str;            }            void showdata() {cout<<str<<endl;}            int operator ~();            int operator =(strings s2);            void operator ==(strings s2);            friend void operator +(strings s1,strings s2);            friend ostream &operator <<(ostream &output,strings &s1)            {          output<<s1.str;                return output;            }            void operator >>(strings &s1);            friend void operator *(strings s1);            friend void operator /(strings s1,strings s2);    };    //string length    int strings::operator ~()    {      int i=0;            while(str[i]!=’\0’)          i++;            return i;    }    //string compare    int strings::operator =(strings s2)  {        int i=0;            while(str[i]==s2.str[i] && i<~s2)          i++;            if(i==~s2)          return 1;            else          return 0;    }    //copy    void strings::operator ==(strings s2)  {      for(int i=0;i<=~s2;i++)          str[i]=s2.str[i];    }    //concat    void operator +(strings s1,strings s2)    {      int i,j,k=0;            strings s3;            for(i=0;i<~s1;i++)            {                s3.str[k]=s1.str[i];                    k++;        }        for(j=0;j<~s2;j++)            {          s3.str[k]=s2.str[j];                    k++;            }            cout<<s3.str<<endl;    }    //reverse    void strings:: operator >>(strings &s1)    {        int len=~s1;            for(int i=0;i<=len/2;i++)            {          char t=s1.str[i];                    s1.str[i]=s1.str[len-i-1];                    s1.str[len-i-1]=t;            }    }    //palindrome    void operator *(strings s1)    {        strings s3;            s3==s1;            s3>>s3;            if((s3=s1)==1)                cout<<"palindrome\n";            else                cout<<"not palindrome\n";    }    //find substring    void operator /(strings s1,strings s2)    {//s2=substring        int flag=0;            for(int i=0;i<~s1;i++)            {                if(s2.str[0]==s1.str[i])                    {              flag++;                            for(int j=1;j<=~s2;j++)                                if(s2.str[j]==s1.str[i+j])                                        flag++;                    }            }            if(flag==~s2)                cout<<"substring exists\n";            else                cout<<"not found\n";    }    int main()    {      strings s1,s2;            int choice;            char c;            cout<<setw(20)<<"STRING OPERATIONS"<<endl;            cout<<"1.accept and display string \n2.check for equality\n3. copy string\n 4.concatenate strings \n5.reverse string\n6.check if a string is a palindrome\n7.search for a substring occurence\n";            do            {                cout<<"enter choice\t";                    cin>>choice;                    if(choice==2)                    {                        cout<<"enter first string\n";                            s1.getdata();                            cout<<"enter second string\n";                            s2.getdata();                            if((s1=s2)==1)                                cout<<"strings are same\n";                            else cout<<"strings are different\n";                    }                    if(choice==3)                    {              cout<<"enter string to copy\n";                        s2.getdata();                            s1==s2;                            cout<<"contents copied to another string\n";                            cout<<"contents of copy string is :\t";                            cout<<s1<<endl;                    }                    if(choice==4)                    {                        cout<<"enter destination string:\n";                            s1.getdata();                            cout<<"enter source string:\n";                            s2.getdata();                            s1+s2;                    }                    if(choice==1)                    {              s1.getdata();                        cout<<"string is:\t";                            cout<<s1<<endl;                            cout<<~s1;                            cout<<endl;                    }                    if(choice==5)                    {                        s1.getdata();                            s1>>s1;                            cout<<"string after reversing is\t";                            cout<<endl;                            cout<<s1<<endl;                    }                    if(choice==6)                    {              s1.getdata();                        *s1;                    }                    if(choice==7)                    {              cout<<"enter main string\n";                        s1.getdata();                            cout<<"enter substring\n";                            s2.getdata();                            s1/s2;                    }                    cout<<"do you want to continue(y/n)?";                    cin>>c;                }while(c==’y’);            return 0;    }

View Article Page
Download