Dzisiaj w C++ potrzebowałem zamienić określony ciąg znaków w stringu na inny. Niestety, w referencji klasy string nie znalazłem odpowiadającej mi funkcji. Nie miałem już ochoty szukać, więc napisałem własną. W sumie możemy wprowadzić 5 argumentów – ciąg do zamiany, ciąg na jaki będzie zamieniany, ciąg, w którym będziemy szukać, limit ilości zamian i offset dla przeszukiwanego ciągu.
Oto plik main.cpp z moją funkcją:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <iostream> #include <string> using namespace std; string zamien(string szukany, string zamien_na, string zdanie, int limit = 0, int offset = 0) { string str = zdanie.substr(offset, zdanie.size() - offset); // wczytanie ciągu z odpowiednim offsetem bool szukanie = true; // zmienna dla wielokrotnego przeszukiwania size_t found; // zmienna dla pozycji wyszukanego ciągu if (limit > 0) limit++; while (szukanie) { found = str.find(szukany); // wszytanie pozycji szukanego ciagu if (found == string::npos || limit == 1) szukanie = false; // jesli znaleziono juz wszystkie ciągi - nie kontunuuj wyszukiwania else str.replace(int(found), szukany.size(), zamien_na); // w przeciwnym razie zamieniaj limit--; // zmniejszenie ilosci ciagow do podmienienia } return zdanie.substr(0, offset) + str; // zwrócenie całego ciągu } int main() { cout << zamien("ala", "lol", "ala to ala alanowa", 1, 2); // przykład użycia return 0; } |
Wszystko opisane w komentarzach. Proszę o opinie, wskazówki i linki do gotowych, lepszych rozwiązań.










Ja wiem Sebastian że Ty lubisz iść pod prąd i wywarzać otwarte drzwi.
http://www.cplusplus.com/reference/string/string/replace/
Ale nie przesadzajmy, dobrze?
To tak samo jak ja pisałem funkcje sortujące w php ;p
Napisz coś ciekawego następnym razem ;> czekam z niecierpliwością. Poczytałbym coś ciekawego.
No tak, tylko zauważ, że ja funkcję którą podałeś w linku użyłem u siebie.
string.replace() pozwala tylko na podmianę na podstawie pozycji, a moja funkcja wyszukuje podany ciąg znaków i go automatycznie zastępuje.
Więc to raczej nie jest jak funkcja sortująca w php
No dobra, masz mnie ;p