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, botów: 0