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:
#include <iostream>
using namespace std;
const int MAX_SIR1 = 1000;
const int MAX_SIR2 = 100;
// Funcția care returnează numărul de apariții ale subșirului sir2 în șirul sir1, precum și indecșii de la care încep subșirurile sir2 în sir1.
// Se folosesc variabile locale pentru sir1, sir2 și rezultate.
void numar_aparitii(char sir1[MAX_SIR1], char sir2[MAX_SIR2], int &numar_aparitii, int indecsi[MAX_SIR1]) {
int lungime_sir1 = strlen(sir1);
int lungime_sir2 = strlen(sir2);
numar_aparitii = 0;
int pozitie = 0; // poziția curentă în sir1 unde se caută sir2
while (pozitie < lungime_sir1) {
// Căutarea sir2 începând de la poziția curentă
bool gasit = true;
for (int i = 0; i < lungime_sir2; i++) {
if (sir1[pozitie + i] != sir2[i]) {
gasit = false;
break;
}
}
if (gasit) {
// Sir2 a fost găsit la poziția pozitie în sir1
indecsi[numar_aparitii] = pozitie;
numar_aparitii++;
pozitie += lungime_sir2; // Salt la poziția următoare după sir2
} else {
pozitie++;
}
}
}
int main() {
char sir1[MAX_SIR1];
char sir2[MAX_SIR2];
cin >> sir1 >> sir2;
int numar_aparitii;
int indecsi[MAX_SIR1];
numar_aparitii(sir1, sir2, numar_aparitii, indecsi);
cout << numar_aparitii << endl;
for (int i = 0; i < numar_aparitii; i++) {
cout << indecsi[i] << " ";
}
cout << endl;
return 0;
}
Exemplu de utilizare:
anaaremereareana are
Ieșire:
2
3 10