Podmienianie ciągów znaków w C++

Written by Sebastian Potasiak

Topics: C++, Programowanie

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ń.

Podziel się z innymi
  • Digg
  • del.icio.us
  • Facebook
  • email
  • Wykop
  • Twitter

3 komentarzy Comments For This Post I'd Love to Hear Yours!

  1. cojack mówi:

    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? :P 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.

  2. 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 :)

  3. cojack mówi:

    No dobra, masz mnie ;p

Leave a Comment Here's Your Chance to Be Heard!