Witam!
Mam takie zadanie:
Napisz funkcję znajdzPodlancuchy, która:
- zlicza liczbę wystąpień zadanego ciągu s1 w zadanym ciągu s2,
- wskazuje pozycje wszystkich wystąpień ciągu s1 w ciągu s2.
Oba ciągi są zbudowane ze znaków alfanumerycznych.
Zastosuj tę funkcję do znalezienia liczby wystąpień ciągu zadanego w pierwszym rekordzie
wejściowym wewnątrz ciągu zadanego w drugim rekordzie wejściowym i wypisania pozycji
tych wystąpień na standardowym wyjściu.
Przykładowo, po uruchomieniu funkcji dla argumentów:
aba
scdababagvfrabcaba
powinniśmy na wyjściu uzyskać odpowiedź:
Znaleziono 3 wystapienia:
4 6 16 //pozycje wystapien
Próbując to zrobić trafiłem na tablice wskaźnikowe. Nie wiem do końca jak ich używać, dlatego proszę o pomoc
Napisałem dwie funkcje. Jedna wywołuje druga
int *znajdzPodlancuchy(string s1, string s2) {
int *arr = new int[100];
cout << "wywolano funkcje ";
int j = 0;
for (int i = 0; i < s2.length(); i++) {
cout << "Rozpoczeta petle ";
if (s1[0] == s2[i]) {
bool poprawne = 1;
while (j < s1.length() || poprawne == 1) {
if (s1[j] == s2[i + j]) {
j++;
}
else
{
poprawne = 0;
}
}
if (poprawne == 1) {
arr[sizeof(arr)] = i;
cout << "Przypisano do tabeli";
}
}
}
return arr;
}
void zadanie8() {
cout << "Podaj dwa ciagi alfanumeryczne. Sprawdze czy 1 z nich wystepuje w 2 (po spacji)" << endl;
string s1, s2;
cin >> s1 >> s2;
int *tab = znajdzPodlancuchy(s1, s2);
cout << "Znaleziono " << sizeof(tab) << "wystapien: " << endl;
for (int i = 0; i < sizeof(tab); i++) {
cout << tab[i] << " ";
}
}
Kompilator nie pokazuje błędu, ale po uruchomieniu w konsoli z zauważam, ze w zależności od tego jakie dane podam to funkcja albo się nie kończy albo podaje nieprawidłowe dane albo wyskakuje błąd w linijce tekstu która nie istnieje w moim kodzie (błąd wyskakuje w konsoli)