Zamiana stringów w stringu

0

Siemka,

Musiałem napisać funkcję

char* zamien_znaki(char *lan, char *wyszukaj, char *zamien)

wyszukującą wszystkie podane ciągi znaków w stringu i zamieniająca je wszystkie na podany parametr. Chciałbym sie dowiedzieć, jak coś takiego można w ANSI C najszybciej i najkrócej zaimplementować. Wyrażenia regularne? Może jeszcze inaczej?

Ja zrobiłem to na około, czyli malloc dla nowego stringa i po kolei dla każdego powtórzenia wyszukiwanego podciągu nadpisuję nowego stringa.

Dzięki, pozdro.

0

Poczytaj sobie o tym algorytmie: http://www.algorytm.org/przetwarzanie-tekstu/algorytm-bm-boyer-moorea.html Jak już znajdziesz dany wzorzec w tekście to łatwo będzie go zamienić na coś innego

0
  1. Zliczasz ilość wystąpień wyszukaj w lan - Count
  2. Obliczasz ile potrzebujesz pamięci Size = strlen(lan)+Count*(strlen(zamien)-strlen(wyszukaj))+1;
  3. Przydzielasz tyle pamięci no chyba że Size<=strlen(lan)+1 wtedy możesz bezpośrednio do tego samego przepisywać.
  4. W petle Przypisujesz do wystapienia wyszukaj, przepisujesz zamień

Jeżeli chodzi o C to radzę zrobić to w taki sposób:
unsigned zamien_znaki(const char *lan, const char *wyszukaj, const char *zamien, char *dest, unsigned size);
funkcja przepisuje do dest jeżeli rozmiar nie przekroczy size.
dest może być NULL zaś size może być 0 w takim razie nić się nie przepisuje zaś i tak funkcja zwraca ile potrzebujesz pamięci.

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