Informatică, întrebare adresată de Fast755, 8 ani în urmă

Exercitiu bac 2012 sesiune speciala.Siruri de caractere .
Vreau rezolvare in c++ cu explicatii !

Anexe:

Răspunsuri la întrebare

Răspuns de Stoicaaa
0

Răspuns:

#include <iostream>

#include <cstring>

using namespace std;

int v[50];

int main(){

   bool verificare=0;

   int poz=0,lg1,lg2;

char cuv1[31],cuv2[31];

cin.getline(cuv1,31);

cin.getline(cuv2,31);

lg1=strlen(cuv1);

lg2=strlen(cuv2);

for(int i=0;i<lg1;++i){

   for(int j=poz;j<=lg2;++j){

           if(cuv1[i]==cuv2[j]){

               verificare=1;

               poz=j+1;

               break;

           }else{

               verificare=0;

           }

}

if(verificare==0){

   break;

}

}

if(verificare==1){

   cout<<"DA";

}else{

cout<<"NU";

}

return 0;

}

Explicație:

Salut! Am citit cele 2 cuvinte si apoi am creat cate un for pentru fiecare.

Primul for ia fiecare litera in parte din primul cuvant, iar al doilea for cauta litera respectiva in cel de-al doilea cuvat. La gasirea literei variabila poz primeste o valoare noua, iar urmatoare litera va fi cautata de la acea pozitie(probabil ai vazut in exemplu ca la aceasta problema este importanta ordinea in care literele din primul cuvant se afla in al doilea).

if(verificare==0){

   break;

}

Aceasta comanda opreste for-ul principal daca o litera din primul cuvant nu se afla in al doilea la iar variabila valoare iese din for cu valoarea 0.

Sper ca ti-am fost de ajutor!


Fast755: La primul break, nu se iese din if ?adica nu-i vad rostul acolo
Stoicaaa: Pai break-ul acela opreste for(int j=poz;j<=lg2;++j) daca nu era acel break , for-ul asta ar fi continuat mai departe si ar fi cautat aceeasi litera in al doilea cuvant
Stoicaaa: Poti sa incerci programul fara el ca sa te convingi
Alte întrebări interesante