Informatică, întrebare adresată de Utilizator anonim, 8 ani în urmă

Program C++, cum se rezolva problema de mai jos ? Sa se scrie un program care citeste de la tastatura un sir de N caractere si afiseaza vectorul avand pe primele pozitii vocalele, iar pe ultimele pozitii consoanele introduse. Multumesc!

Răspunsuri la întrebare

Răspuns de artur99
6

Tot ce trebuie să faci este să te gândești că este un vector de numere (int-uri), și trebuie să-l sortezi după o anumită regulă.

Să luăm un caz simplu: să spunem că am avea un vector de numere de la 1 la 20. Și s-ar cere ca numerele pare să fie la început, iar cele impare să fie la sfârșit. În acest caz, am putea aplica orice algoritm de sortare (bubble sort, inserție, selecție, etc), iar acolo, la condiție, când verificăm dacă ordinea e ok, nu verifică să fie v[i] < v[j] (și în caz contrar să inversăm), ci verificăm ca v[i] să fie par și v[j] impar, iar dacă este invers, le schimbăm ordinea.

În cazul problemei tale, condiția de verificare ar fi următoarea (presupunem că i este elementul mai din stânga iar j e cel din dreapta, e ceva clasic într-un algoritm de sortare):

Dacă v[i] este consoană și v[j] este vocală, atunci acestea trebuie inversate, în orice alt caz, le lăsăm cum sunt (e ok dacă este vocală-consoană, vocală-vocală, sau consoană-consoană).

Și ar arăta astfel:

if(strchr("aeiouAEIOU", v[i]) == nullptr && strchr("aeiouAEIOU", v[j]) != nullptr){

// Atunci ordinea e greșită

// avem o consoană în stânga unei vocale și le inversăm

}

În caz că n-ai mai folosit strchr():

strchr(sir, caracter) este o funcție care caută și vede dacă un caracter există într-un șir și aici o folosim ca să ne dăm seama dacă caracterul (v[i] sau v[j]) este vocală. Cum facem asta?

strchr("aeiouAEIOU", v[i])

Apelul ăsta caută caracterul v[i] în șirul "aeiouAEIOU", deci dacă în v[i] este litera 'e', o să fie găsită (pentru că este vocală și există în șirul aeiouAEIOU, pe a doua poziție), iar dacă în v[i] este 't', n-o să fie găsită. Funcția returnează nullptr dacă nu găsește nimic (de asta verificăm să fie nullptr ca să verificăm dacă e consoană litera), și un pointer spre locația literei găsite în șir, dacă s-a găsit.

Acest apel de funcție (strchr("aeiouAEIOU", v[i]) == nullptr) poate fi înlocuit și cu: (v[i] != 'a' && v[i] != 'e' && v[i] != 'i' && v[i] != 'o' && v[i] != 'u' && v[i] != 'A' && v[i] != 'E' && v[i] != 'I' && v[i] != 'O' && v[i] != 'U'), dar e cam mare condiția. :)

Rezolvare completă:

#include <iostream>

#include <cstring>

using namespace std;

int main(){

   char v[100];

   char aux;

   int i, j, n;

   

   cin>>v;

   n = strlen(v);

   

   for(i = 0; i < n; i ++) {

       for(j = i + 1; j < n; j ++) {

           if(strchr("aeiouAEIOU", v[i]) == nullptr && strchr("aeiouAEIOU", v[j]) != nullptr) {

               aux = v[i];

               v[i] = v[j];

               v[j] = aux;

           }

       }

   }

   cout<<v<<endl;

}

** Am atașat și în imagine codul, nu știu dacă nu-l strică cumva brainly. :))

Anexe:

Utilizator anonim: Domnule artur99 esti genial. Multumesc pentru rationament si explicatii
Alte întrebări interesante