Znajdowanie pozycji wyrazu w stringu

0

Witam
Piszę program które wyszukuje w zadanym stringu dany ciąg znaków, a następnie za pomocą find zwracam jego pozycję i za pomocą pętli for wypisuję np daną ilość "*", a następnie dany "wyraz" Robiłem to tak:

for(int i=0; i<znalezionaPozycja; i++)
      cout << "*";

Zmienna "znalezionaPozycja" jest typu size_t.
Problem pojawia się gdy w danym stringu dany ciąg znaków powtórzy się więcej niż raz, bo dana pętla już się nie sprawdza. Wprowadziłem dodatkową zmienną "licznik" typu int, i zedytowałem pętlę for(int i=0; i<znalezionaPozycja-licznik; i++) ... ale nie działa.
Jakieś sugestie jak to obejść?
Pozdr

0

http://stackoverflow.com/questions/4034750/find-all-a-substrings-occurrences-and-locations

string str,sub; // str is string to search, sub is the substring to search for

vector<size_t> positions; // holds all the positions that sub occurs within str

size_t pos = str.find(sub, 0);
while(pos != string::npos)
{
    positions.push_back(pos);
    pos = str.find(sub,pos+1);
}
0

Nie działa i robię to bez biblioteki "vector" której nie znam w ten sposób:

        size_t znalezionaPozycja = tekst.find(p3);
        do
        {
            for(int i=0; i<znalezionaPozycja; i++)
            {
                wynik << " ";
            }
            cout << tekst;
            znalezionaPozycja = tekst.find( p3, znalezionaPozycja + 1 );
        } while( znalezionaPozycja != string::npos );

Jakieś inne propozycje?

0

Nie mogę zedytować jeśli nie mam konta, oczywiście w miejscu

wynik << " ";

ma być

cout << "*";
0

Jakieś inne propozycje?
Przestań pisać gówniany kod i myśl co piszesz.
Jeśli wektor, który jest tak podstawowy jak nauczanie dodawania jest Ci obcy - chociaż zobaczenie jego interfejsu(który jest dziecinnie prosty) to 3 minuty w dokumentacji - to zamień ten kod:

string str,sub; // str is string to search, sub is the substring to search for
 
vector<size_t> positions; // holds all the positions that sub occurs within str
 
size_t pos = str.find(sub, 0);
while(pos != string::npos)
{
    positions.push_back(pos);
    pos = str.find(sub,pos+1);
}

na to

string str,sub; // str is string to search, sub is the substring to search for
 
size_t pos = str.find(sub, 0);
while(pos != string::npos)
{
    cout << pos << endl;
    pos = str.find(sub,pos+1);
}

Działa idealnie jeśli sub, str zawierają odpowiednie dla tej operacji wartości.

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