Cod sursa(job #2790406)

Utilizator raduandreiRadu Andrei raduandrei Data 28 octombrie 2021 21:50:21
Problema Sortare topologica Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 3.59 kb
#include <bits/stdc++.h>

using namespace std;

class String {
    int lungime_cuvant;
    char *sir;


public:
    String() {                                      // Concstructor fara parametru
        lungime_cuvant = 0;
        sir = NULL;
    }

    String(const char *cuv, int lun) {              //Constructor cu parametrii
        lungime_cuvant = lun;
        sir = new char[lungime_cuvant + 1];
        strcpy(sir, cuv);
    }

    String(const String &str)                        // Constructor de copiere
    {
        lungime_cuvant = str.lungime_cuvant;
        sir = new char[str.lungime_cuvant + 1];
        strcpy(sir, str.sir);
    }

    ~String() {                                   //Destructor
        delete[] sir;
    }

    char *returneaza_litere_mari();             //Prima cerinta

    char cel_mai_frecvent_caracter();          //A 2-a cerinta

    void concatenare(char const *sir2);       //A 3-a cerinta

    static void is_substring(char sir1[], char sir2[]) {
        int ok = 0;
        if (strstr(sir1, sir2) != NULL || strstr(sir2, sir1) != NULL)
            ok = 1;
        if (ok == 1) cout << "un sir il contine integral pe celalalt \n";
        else cout << "niciun sir nu contine pe celalalt integral\n";
    }
};

char *String::returneaza_litere_mari() {
    for (int i = 0; i < lungime_cuvant; ++i)
        if (sir[i] <= 'z' && sir[i] >= 'a')
            sir[i] -= int('a' - 'A');

    return sir;
}

char String::cel_mai_frecvent_caracter() {
    int frecv[256];
    for (int i = 0; i <= 256; ++i)
        frecv[i] = 0;
    int max = 0;
    char solutie;
    for (int i = 0; i < lungime_cuvant; ++i) {
        frecv[sir[i]]++;
        if (frecv[sir[i]] > max) {
            max = frecv[sir[i]];
            solutie = sir[i];

        }
    }
    return solutie;
}

void String::concatenare(const char *sir2) {
    strcat(this->sir, sir2);
    cout <<"Sirul dupa concatenare este:"<< this->sir << endl<<endl;
}



int main() {

    char t[256],v[256],w[256];
    int lun;
    cout<<"introduceti lungimea sirului: "; cin>>lun;
    cout<<"introduceti sirul: ";cin>>t;
    String s(t,lun);
    char opt;
    do {
        cout<<endl<<endl<<"       MENIU         "<<endl;
        cout<<"                 1 - Returnarea sirului cu litere mari:"<<endl;
        cout<<"                 2 - Cel mai frecvent caracter din sir este:"<<endl;
        cout<<"                 3 - Concatenarea:"<<endl;
        cout<<"                 4 - Verificare functie is_substring"<<endl;
        cout<<"                 x - Iesire"<<endl;
        cout<<"                 Introduceti optiunea:"; cin>>opt;
        switch(opt)
        {
            case '1':cout<<"--------> Rezultatul este="<<s.returneaza_litere_mari()<<endl<<endl;
                break;
            case '2':cout<<"--------> Rezultatul este="<<s.cel_mai_frecvent_caracter()<<endl<<endl;
                break;
            case '3': {cout<<"Introduceti sirul ce se doreste a fi concatenat:";
                     cin>>v;
                     s.concatenare(v);

                      }
                break;
            case '4':
                     {   cout<<"Introduceti sirurile ce doresc a fi verificate:";
                     cout<<endl;
                         cout<<"Primul sir:";cin>>v;
                         cout<<endl;

                         cout<<"Al 2-lea sir:";cin>>w;
                         cout<<endl;
                         s.is_substring(v,w);
                     cout<<endl<<endl;}
                break;
            case 'x':exit(1);
            default: cout<<"\n Optiune incorecta ! ! ! ! \n ";
        }
    }
    while(opt!='x');






    return 0;
}