Problemă rezolvată șir de caractere clasa a XI-a mate-info neintensiv #2

Enunț

Se citește de la tastatură un cuvânt și apoi un text de maxim 70 de caractere (scris pe un singur rând). Să se afișeze umărul de apariții ale cuvântului citit în cadrul textului.

Exemplu: dacă se citește textul „E bine e foarte bine” și cuvântul „bine”, programul va afișa valoarea 2.

Vizual


Rezolvare

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
 char cuvant[71] = "bine", rand[501];

 cout << "Randul: "; cin.getline(rand, 500);

 int rezultat = 0;
 char *i = rand;
 while (i = strstr(i, cuvant))
 {
  ++rezultat;
  ++i;
 }

 cout << "Cuvantul \"" << cuvant << "\" apare de " <<
  rezultat << " ori in rand." << endl;

 return 0;
}

Explicații

In trecut, în loc de <cstring> se folosea <string.h>.

Se consideră că un cuvânt are maxim 70 de caractere și un rând de text are maxim 500 caractere.

rezultat este variabilă de tip întreg care reține ca un contor numărul de apariții ale cuvântului cuvant în rândul de text rand.

i este un pointer (indicator) către începutul rândului de text din rand și la prima parcurgere a condiției de continuare a while-ului se schimbă în prima apariție a cuvântului în rând, sau în NULL dacă nu există asemenea apariție. La următoarea parcurgere, va fi ori NULL, ori poziția celei de-a doua apariții a cuvântului în rând etc.

strstr(i, cuvant) din condiția de continuare a ciclului while se atribuie lui i. acest apel întoarce poziția următoarei apariții a cuvântului în cuvântul care începe la adresa de memorie i (rand[x] este echivalent cu rand + x fiind vorba de pointeri C).

Niciun comentariu:

Trimiteți un comentariu