Salve a tutti ragazzi, oggi nella risoluzione di questo esercizio ho avuto un dubbio amletico per quanto riguarda le matrici di puntatori a stringhe. Come sappiamo una stringa non è altro che un array di char, di conseguenza una matrice di stringhe non è altro che una matrice in cui troviamo nella
riga i e nella
colonna j una stringa (ovvero array di char), di conseguenza una stringa dichiarata nel seguente modo
string s[2][2]
conterrà 4 stringhe. Detto ciò, cosa si intende per esattamente con matrice di puntatori a stringhe? Ad esempio la dichiarazione string *s[2][2] è una matrice bidimensionale in cui nella
riga i e nella
colonna j è presente un puntatore a stringhe, quindi potremmo dire che in ogni elemento di
riga i e di
colonna j è presente un puntatore a puntatore char (**char)? Non mi è ben chiara questa definizione, infatti nello svolgere l'esercizio non riesco a inserire le stringhe nella matrice bidimensionale, vi allego qui il mio codice
#include <iostream>
#include <cstring>
#include <cctype>
using namespace std;
#define n 2
int funz(string *M[][n], unsigned short int k, unsigned short int s);
int main()
{
string *M[n][n];
unsigned short int k;
unsigned short int s;
cout << "Inserire il numero di stringhe minimo in ogni colonna: "; cin >> k;
cout << "Inserire il numero di vocali minore: "; cin >> s;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> *M[i][j];
cout << funz(M,k,s);
}
int funz(string *M[][n], unsigned short int k, unsigned short int s)
{
short int n_colonne = 0; //Numero colonne che contengono almeno k stringhe con vocali < s
short int n_vocali = 0; //Conta le vocali e le confronta con s
char v[6] = {"AEIOU"};
for(int i = 0; i < n; i++)
{
int n_stringhe = 0;
for(int j = 0; j < n; j++)
{
string sPtr = *M[j][i];
short int l = sPtr.length();
for (int z = 0; z < l; z++)
for (int y = 0; y < 5; y++)
if(toupper(sPtr[z]) == v[y])
n_vocali++;
// Questi ultimi due cicli confrontano le lettere della stringa con le vocali una ad una
if(n_vocali < s)
n_stringhe++;
}
if(n_stringhe >= k)
n_colonne++;
} return n_colonne;
}
Testo dell'esercizio
ESERCIZIO 2
Scrivere un metodo che prenda in input una matrice di puntatori a stringhe M e due numeri short senza
segno, k ed s, e restituisca il numero di colonne contenenti almeno k stringhe con un numero di lettere vocali
minore di s.