Podmiana substringu

0

Witam. Napisalem program, ktory w zadanym stringu zamienia stary wzorzec na nowy wzorzec. Wyroznilem w nim 3 przypadki: oba wzorce sa rownej dlugosci, stary jest dluzszy od nowego oraz przypadek, w ktorym nowy jest dluzszy od starego. Interesuje mnie poprawienie mojego programu w przypadku 3 - ostatni else w funkcji. Z gory dzieki.

#include<iostream>
#include<cstdlib>
using namespace std;

void zamien(char * tekst, char *st_wz, char * nw_wz)
{
	char * pozycja;
	while (strstr(tekst, st_wz) != NULL)
	{
		pozycja = strstr(tekst, st_wz);
		if (strlen(st_wz) == strlen(nw_wz)) 
			for (char *i = pozycja, *j = nw_wz; i < pozycja + strlen(nw_wz); ++i, ++j) *i = *j;
		else if (strlen(st_wz) > strlen(nw_wz))
		{
			for (char *i = pozycja, *j = nw_wz; i < pozycja + strlen(nw_wz); ++i, ++j) *i = *j;
			for (char *i = pozycja + strlen(nw_wz); *i != 0; ++i) *i = *(i + (strlen(st_wz) - strlen(nw_wz)));
		}
		else
		{
			for (char *i = tekst + strlen(tekst); i >= pozycja ; --i) *i = *(i - (strlen(nw_wz) - strlen(st_wz)));
			for (char *i = pozycja, *j = nw_wz; i < pozycja + strlen(nw_wz); ++i, ++j) *i = *j;
		}
	} 
}

int main()
{
	char tekst[100] = "ala ma kota a ola ma psa";
	char stary[] = "ma";
	char nowy[] = "siala";
	zamien(tekst, stary, nowy);
	cout << tekst;
	return 0;
} 
0

przypadek, w ktorym nowy jest dluzszy od starego.
A jak nowszy jest dłuższy to co wtedy? W jaki sposób zabezpieczasz się przed wyjechaniem poza tablicę?

0

Widzi ktos moze dlaczego przy ostatniej podmianie nowego wzorca na stary urywa mi sie to, co jest dalej w stringu? Moze przez przypadek dodaje gdzies znak 0?

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