Wort in Satz finden

Wir sollen eine Funktion schreiben, welche überprüft, ob ein Wort in einem String vorhanden ist. Wenn ja soll der Index (Beginn vom Wort im Satz) ausgegeben werden, wenn nein -1.
(zur vereinfachung muss nur der erste Buchstabe untersucht werden falls es mehhrere gleiche gibt)


Code:
#include <iostream>
#include <string>

using namespace std;

int find(string s, string pattern)
{
    for(int i=0;i<s.size();i++)

    {
        if(s[i] == pattern[0])

        {
            for(int j=i+1;j<(j+pattern.size());j++)

            {
                if(s[j] != pattern[i])

                {

                    return -1;

                }

            }   return i;

        }

    }


}

int main()

{
    cout << find("petter", "er") << endl;
    return 0;

}

Die Funktion nimmt s (den Satz) und Pattern (das gesuchte).
Meine Idee ist, mit der äußeren Schleife den Beginn des gesuchten zu finden (erste if-Abfrage).
In der inneren Schleife (läuft solange wie das gesuchte Wort lang ist) werden dann die restlichen Elemente des gesuchten und des Satzes verglichen.
Das Problem ist, dass ich immer -1 rausgegeben bekomme (z.B. beim Aufruf in der Main).

Vielleicht kann mir jemand helfen :D
 

Zvoni

Erfahrenes Mitglied
das pattern [ i ] ist falsch.
i bleibt ja auf dem Wert der äusseren Schleife stehen, solange du in der inneren bist. Hier könntest du sogar in Index out of bounds laufen (oder wie das in C++ heisst).
Nimm mal als Ausgangspunkt "Bretter" für s, dann ist i = 2 wenn du in die innere Schleife springst (Position von "e"), und schon greifst du mit pattern auf ein nicht vorhandenes Zeichen.

Die For-Schleife muss glaube ich so heissen:
Code:
for(int j=1;j<pattern.size());j++)
{
                if(s[i+j] != pattern[j])

                {
Kann mich aber auch irren.