Esercizio sugli array

di il
4 risposte

Esercizio sugli array

Salve, ho davanti il seguente esercizio:

Scrivere un metodo che prenda in input una matrice A di stringhe ed una stringa str, e restituisca un boolean che indichi se str è sottostringa di almeno metà delle stringhe presenti in una qualche riga di A.

Sapreste guidarmi sullo svolgimento?

4 Risposte

  • Re: Esercizio sugli array

    Inizia a scrivere il codice per prendere in input la matrice e la stringa.
    Dopo di chè, di cosa hai bisogno?
    Devi controllare ogni elemento della matrice: se esso contiene la stringa str, incrementi di uno un apposito contatore.
    Dopo aver controllato tutti la matrice, il tuo contatore ti dirà quante sono le stringhe che soddisfano la tua condizione. Se tale numero è uguale o maggiore al numero di elementi, allora restituisci true; altrimenti, false.
    Inizia a ragionarci da solo, prova a scrivere qualcosa, e poi ritorna se hai bisogno
  • Re: Esercizio sugli array

    tuixte ha scritto:


    Inizia a scrivere il codice per prendere in input la matrice e la stringa.
    Dopo di chè, di cosa hai bisogno?
    Devi controllare ogni elemento della matrice: se esso contiene la stringa str, incrementi di uno un apposito contatore.
    Dopo aver controllato tutti la matrice, il tuo contatore ti dirà quante sono le stringhe che soddisfano la tua condizione. Se tale numero è uguale o maggiore al numero di elementi, allora restituisci true; altrimenti, false.
    Inizia a ragionarci da solo, prova a scrivere qualcosa, e poi ritorna se hai bisogno
    Ciao grazie per la risposta!
    Allora sono arrivato fin qui e prima di andare avanti vorrei ottimizzare questo pezzo di codice:
    #include <cstdlib>
    #include <iostream>
    #include <string>
    #include <iomanip>
    
    using namespace std;
    /*
    Scrivere un metodo che prenda in input una matrice A di stringhe ed una stringa str, e restituisca un boolean 
    che indichi se str è sottostringa di almeno metà delle stringhe presenti in una qualche riga di A.
    */
    int main()
    { 
        //Prendiamo una stringa in input di nome str
        string str,strinp;
        cout << "Inserisci una stringa: "; getline(cin,str); cout << endl;
        //Prendiamo una matrice A di stringhe in input;
        int righe;
        cout << "Inserisci il numero di righe: ";
        cin >> righe; cout << endl;
        int colonne = 0;
        cout << "Inserisci il numero di colonne : ";
        cin >> colonne; cout << endl;
        string A [righe][colonne];
        for (int i=0; i<righe; i++)
       {
            for(int c=0; c<colonne; c++)
            {
                    cout << "Inserisci una stringa: ";
                    cin >> strinp;
                    cout << endl;
                    A[i][c]= strinp; 
            }
       }
        cout << "Ecco la tua matrice: \n\n";
        for (int i=0; i<righe; i++)
       {
            for(int c=0; c<colonne; c++)
            {       
                     
                     cout << A[i][c] << "  ";
            }
            cout << endl;
       }
                    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    
    Vorrei sapere come incolonnare la tabella e "disegnare" i bordi, con un setw mi viene proprio sballato perchè le stringhe possono avere lunghezza diversa tra di loro...
  • Re: Esercizio sugli array

    Prima di pensare all'ottimizzazione o all'estetica, pensa prima a finire il programma!
  • Re: Esercizio sugli array

    tuixte ha scritto:


    Prima di pensare all'ottimizzazione o all'estetica, pensa prima a finire il programma!
    using namespace std;
    /*
    Scrivere un metodo che prenda in input una matrice A di stringhe ed una stringa str, e restituisca un boolean 
    che indichi se str è sottostringa di almeno metà delle stringhe presenti in una qualche riga di A.
    */
    int main()
    { 
        //Prendiamo una stringa in input di nome str
        string str,strinp;
        cout << "Inserisci una stringa: "; getline(cin,str); cout << endl;
        //Prendiamo una matrice A di stringhe in input;
        int righe;
        cout << "Inserisci il numero di righe: ";
        cin >> righe; cout << endl;
        int colonne = 0;
        cout << "Inserisci il numero di colonne : ";
        cin >> colonne; cout << endl;
        string A [righe][colonne];
        for (int i=0; i<righe; i++)
       {
            for(int c=0; c<colonne; c++)
            {
                    cout << "Inserisci una stringa: ";
                    cin >> strinp;
                    cout << endl;
                    A[i][c]= strinp; 
            }
       }
        
        
        cout << "Ecco la tua matrice: \n\n";
        for (int i=0; i<righe; i++)
        {
            for(int c=0; c<colonne; c++)
            {       
                     cout << setw(2) << " | " << setw(10) << A[i][c] ;
            }
            cout << endl;
       }
        //bool che dirà se le stringhe che contengono str saranno almeno maggiori della metà
        bool maggiore = false;
        int cont = 0;
        int num_elementi = righe*colonne; cout << "Il numero di elementi e': " << num_elementi <<"." << endl;
        for (int i= 0; i < righe; i++)
        {
            for(int c=0; c< colonne; c++)
            {
                    if (A[i][c] == str)
                    {cont++;}
                    else
                    {}
            }
        }
            if (cont >= num_elementi)
            {maggiore = true;
            cout << "La stringa " << str << " e' contenuta in " << cont << " elementi della matrice." << endl;}
            else if (cont < num_elementi)
            {cout << "La stringa " << str << " e' contenuta in " << cont << " elementi della matrice." << endl;}
            else if (cont == 0)
            {cout << "La stringa " << str << " non e' contenuta in nessun elemento della matrice." << endl;}
            
            
            
        
       
        
       
        
        
        system("PAUSE");
        return EXIT_SUCCESS;
    }
Devi accedere o registrarti per scrivere nel forum
4 risposte