Algorytm na usuwanie n-tego wyrazu z ciagu string

0

Czesc, mysle nad funkcja ktora bedzie usuwac n-ty wyraz ze zdania w ktorym moga byc tylko litery i spacje.
Myslalem nad zrobieniem string nowy = "" i przepisywania tam znakow bez tych do usuniecia,
mam problem ze spacjami jednak, moze ich byc wiecej niz jedna miedzy slowami.
Jak sobie poradzic z tym numerem slowa do usuniecia? Chciales zeby jesli np. slowo do usuniecia ma numer 3, to ide przez zdanie i nie przepisuje znakow po 2 spacji, ale to sie nie sprawdzi jesli spacji miedzy slowami bedzie wiecej. prosze o pomoc

dodam ze nie moge uzywac funkcji erase, replace, delete.

3

A Musisz zachować te spacje? Bo jak nie, to można zrobić split tego stringa po spacjach i pozamiatane :)

1
template<typename InIt>
InIt find_nth_spacing(InIt b, InIt e, unsigned int n)
{
     while(b != e) {
           if (n == 0) return b;
           b = std::find_if(b, e, [](auto x) { return std::isspace(x); });
           b = std::find_if(b, e, [](auto x) { return !std::isspace(x); });
           --n;
     }
     return b;
}
1

Dobre! Ale jak on usunie wyraz, to te iteratory będą wskazywać na inne miejsca w stringu.

1

@xyzzyx: Jak tam są tylko litery i spacje, to po odnalezieniu wyrazu do usunięcia, zamień go, np. na #, a potem, tak jaki Miałeś oryginalny plan, Dokładaj do nowego stringa, znak po znaku, wszystko co nie jest #.

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