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

URGENT!!
Să se scrie un program C++ care conține o (singură) funcție ce returnează numărul de apariții ale subșirului sir2 in șirul sir1, precum și indecșii de la care încep subșirurile sir2 in sir1.

sir1 conține maxim 1000 de caractere, iar sir2 maxim 100 caractere.

NU se folosesc funcții din biblioteca cstring. Prelucrarile se fac la nivel de caracter.

În funcția main() se citesc datele de intrare, se apelează funcția și se afișează pe 2 linii separate: numărul de apariții, respectiv indecșii separați de un spațiu.

NU se folosesc variabile globale.

Date de intrare:

sir1 sir2

Date de ieșire:

Linia 1: Numărul de apariții ale sir2 in sir1. În cazul în care sir2 nu se găsește in interiorul sir1, se va afișa 0.
Linia 2: indecșii de la care încep sir2 în sir1, separați prin spațiu. Daca sir2 nu se găsește în sir1, Linia 2 rămâne goală.

Exemplu:

Date de intrare:

anaaremereareana are

Date de ieșire:

2

3 10

Răspunsuri la întrebare

Răspuns de VxF
2

Răspuns:

#include <iostream>

int sir_in_sir(char *sir1, char *sir2, int *pozitii)

{

   int rezultat = 0;

   for (int i = 0; sir1[i]; i++) {

       bool gasit = true;

       for (int j = 0; sir2[j]; j++) {

           if (sir1[i + j] != sir2[j]) {

               gasit = false;

               break;

           }

       }

       if (gasit) {

           pozitii[rezultat] = i;

           rezultat++;

       }

   }

   return rezultat;

}

int main()

{

   char sir1[1000], sir2[100];

   std::cin >> sir1 >> sir2;

   

   int pozitii[1000];

   int numar = sir_in_sir(sir1, sir2, pozitii);

   

   std::cout << numar << std::endl;

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

       std::cout << pozitii[i] << " ";

   }

   std::cout << std::endl;

}

Explicație:

Alte întrebări interesante