Se numește șir vocalic asociat unui șir de caractere format din litere mici ale alfabetului englez un șir egal cu acesta, dacă el este format numai din vocale, sau un șir obținut din acesta prin eliminarea tuturor consoanelor sale. Se consideră vocale literele a, e, i, o, u. Exemplu: șirul ui este șir vocalic asociat unor șiruri ca nuci, frunzis sau ui, iar șirul vid este șir vocalic asociat unor șiruri ca brr sau mr. Subprogramul vocalic are doi parametri: • s, prin care primește un șir de cel mult 100 de caractere, numai litere mici ale alfabetului englez; • sv, prin care furnizează șirul vocalic asociat șirului primit prin parametrul s. Scrieți un program Pascal/C/C++ care citește de la tastatură un text format din maximum 100 de caractere, în care cuvintele sunt formate din litere mici ale alfabetului englez și sunt separate prin câte un spațiu. Programul afișează pe ecran mesajul DA, dacă există cel puțin o pereche de cuvinte din text care au asociat același șir vocalic, sau mesajul NU în caz contrar. Programul cuprinde definiția completă a subprogramului precizat mai sus, precum și apeluri utile ale acestuia. Exemplu: dacă se citește textul in livada de nuci soarele picteaza des stele de aur prin frunzis se afișează pe ecran mesajul DA
Răspunsuri la întrebare
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int sir_vocalic(char* s, char *sv){
int k = 0;
char c;
int cod = 0;
for(; (*s) != 0; s++){
c = *s;
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u'){
sv[k++] = c;
cod += c * k * k;
}
}
sv[k] = '\0';
return cod % k + k * 100; // returneaza un fel de hash
}
char siruri_voclaice[10100][5][100];
string str;
char sv[100];
int main(){
bool da = false;
while(cin>>str){
char *s = (char*)str.c_str();
int cod = sir_vocalic(s, sv);
bool brk = false;
for(int i = 0; i < 5 && siruri_voclaice[cod][i][0] != 0; i++) // folosim hash-ul sa cautam in tabloul tridimensional
{
if(strcmp(siruri_voclaice[cod][i], sv) == 0){
da = true;
brk = true;
break;
}
}
if(brk)
break;
for(int i = 0; i < 5; i++)
if(siruri_voclaice[cod][i][0] == 0){
strcpy(siruri_voclaice[cod][i], sv); // sau sa il copiem in cazul in care nu exista
break;
}
}
cout << (da ? "DA" : "NU");
}