Funkcja zwracająca tabele jednowymiarowa

0

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)

3

sizeof(tab) nie zwraca (w tym kontekście) rozmiaru tablicy, tylko rozmiar wskaźnika (czyli w Twoim przypadku 4 albo 8, w zależności od tego czy masz system 32-bitowy czy 64-bitowy).

Musisz albo sam w jakiś sposób zwrócić dodatkowo informację o rozmiarze tablicy (w C++ domyślnie taka informacja nie jest przechowywana), albo wykorzystać std::vector.

1
std::vecor<std::string::size_type> indexesOfSubstringIn(const std::string& s, const std::string& subStr)
{
    std::vecor<std::string::size_type> indexes;

    auto index = s.find(subStr);
    while (index != std::string::npos) {
         indexes.push_back(index);
         index = s.find(subStr, index + 1);
    }

    return  indexes;
}
0

Problem rozwiązany w inny sposób(ten sam algorytm, bez używania 2 funkcji, z tablicą statyczna). Nie mogę usunąć wątku, więc proszę o zamknięcie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1