Se numește șir consonatic asociat unui șir de caractere format din litere mici ale alfabetului englez un șir egal cu acesta, dacă el nu are nicio vocală, sau un șir obținut din acesta prin eliminarea tuturor vocalelor sale. Se consideră vocale literele a, e, i, o, u.
Exemplu: șirul sct este șir consonatic asociat unor șiruri ca scut, uscate sau sct, iar șirul vid este șir consonatic asociat unor șiruri ca oaie sau ei.
Subprogramul consonatic are doi parametri:
• s, prin care primește un șir de cel mult 100 de caractere, numai litere mici ale alfabetului englez;
• sc, prin care furnizează șirul consonatic 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 numărul perechilor formate din cuvinte din text care au asociate același șir consonatic, ca în exemplu. Ordinea cuvintelor dintr-o pereche nu are importanță. Programul cuprinde definiția completă a subprogramului precizat mai sus, precum și apeluri utile ale acestuia.
Exemplu: dacă se citește textul
vantul
da
iama
in
livada
de
meri
facand
un
scut
din
evantaiul
de
frunze
uscate
se afișează pe ecran numărul
6
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
ifstream fin("decitit");
char sir[105],sir2[105],cuvinte[105][105];
int k=0,j=0,nr=0;
void citire()
{
fin.getline(sir, 105);
}
void creare(char *str)
{
int j=0,nr=0,ok=0,maxim=0;
char *pch;
for(int i=0 ; i<=strlen(str); i++)
{
if(str[i]!='a' && str[i]!='e' && str[i]!='i' && str[i]!='o' && str[i]!='u')
{
sir2[j]=str[i];
j++;
}
}
pch = strtok (sir2," ");
while (pch != NULL)
{
j=0;
for(int j=0; j<=strlen(pch); j++)
{
cuvinte[k][j]=pch[j];
}
pch = strtok (NULL, " ,.-");
k++;
}
/*for(int i=0; i<=15; i++)
{
for(int j=0; j<=15; j++)
{
cout<<cuvinte[i][j];
}
cout<<endl;
}*/
for(int i=0; i<k; i++)
{
for(int j=i+1; j<k; j++)
{
ok=0;
if( strlen(cuvinte[i]) > strlen(cuvinte[j]) )
maxim=strlen(cuvinte[i]);
else
maxim=strlen(cuvinte[j]);
for(int k=0; k<maxim; k++)
if(cuvinte[i][k]!=cuvinte[j][k])
ok=1;
if(ok==0)
nr++;
}
}
cout<<nr;
}
int main()
{
citire();
creare(sir);
return 0;
}
Explicație:
Refacem sirul fara vocale, stocam fiecare cuvant intr-o matrice, comparam elementele in matrice.