Într-un text cu cel mult 102 caractere, cuvintele sunt formate din litere mici ale alfabetului englez și sunt
separate prin câte un spațiu. Scrieți un program C/C++ care citește de la tastatură un text de tipul
precizat, pe care îl transformă în memorie, eliminând numai ultima vocală care apare în text, ca în
exemplu. Programul afișează pe ecran textul obținut sau mesajul nu exista, dacă în text nu există
nicio vocală. Se consideră vocale literele a, e, i, o, u.
Exemplu: dacă se citește textul: cuvantul ritm poate fi tradus rhythm
se obține textul cuvantul ritm poate fi trads rhythm
Răspunsuri la întrebare
Răspuns:
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char vocale[]="aeiou", sir[103];
int gasit = 0;
cin.get(sir,102);
strrev(sir);
for(int i = 0; i < strlen(sir)-1; i++ )
{
if ( strchr(vocale,sir[i]) )
{
strcpy(sir+i,sir+i+1);
gasit = 1;
break;
}
}
strrev(sir);
if ( gasit == 0 )
cout << "Sirul nu contine vocale.";
else
cout << sir;
}
Explicație:
Pentru a face un numar de pasi mai putini prin parcurgeri am ales sa inversez sirul prin functia strrev( sir ) care practic transforma sirul in oglinditul sau.
Exemplu:
Sirul este: ana are mere
Dupa apelul functiei strrev(sir) sirul de caractere va fi erem era ana.
Astfel ca putem verifica prima vocala care apare in sir, ceea ce am si facut in cod, dupa care, odata ce s-a gasit o vocala, atribuim peste acea pozitie restul sirului ramas cu exceptia acelei vocale.
Pe baza exemplului anterior inseamna ca primul e din erem era ana va fi sters ramanand rem era ana. Urmatorul pas este sa inversam din nou sirul deoarece noi am facut un mic artificiu inversandu-l prima data iar cerinta ne cere sa afisam sirul initial fara acea vocala.
Apelam strrev(sir), sirul va fi: ana are mer
Afisam sirul.
Succes :D