Podmiana substringu

Odpowiedz Nowy wątek
2015-01-23 13:45
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;
} 

Pozostało 580 znaków

2015-01-23 14:00
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ę?

W żaden sposób - najpierw chce zrobic program na zwyklych tablicach, a pozniej jak juz zrobie taki to to stworze dynamiczne tablice i wtedy sie bede martwil o zwiekszanie dlugosci tablicy. - sztukers 2015-01-23 14:03
Dlatego na początku moja tablica ma 100 elementow - duzo wiecej niz musi miec. - sztukers 2015-01-23 14:03
nie chodzi o zwiększanie długości, tylko o zasadę: powinieneś przekazywać rozmiar tablicy (w twoim przypadku 100) jako dodatkowy parametr - Azarien 2015-01-23 14:03
Mowie Ci, ze jak pozniej rozszerze ten program o dynamiczne tablice to przy kazdym wejsciu do petli bede rozszerzal ta tablice, a tym samym nigdy poza nia nie wyjade. - sztukers 2015-01-23 14:07

Pozostało 580 znaków

2015-01-23 14:16
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?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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