Witam.
Napisałem sobie funkcję będącą odpowiednikiem PHP-owego explode() (http://pl.php.net/explode). Dzieliła ona ciąg znaków na tablicę mniejszych ciągów, oddzielając od siebie poszczególne elementy na podstawie pojedynczego znaku, np. explode(’|’,“Pierwszy|Drugi|Trzeci”) zwróci tablicę 3 elementów (“Pierwszy”,“Drugi” i “Trzeci”). Mój kod:
#include string
std::string* Explode(std::string& str,char delimeter) {
if(str.empty() == true) return NULL;
unsigned len = str.size();
unsigned liczba_wystapien = 0;
for(unsigned i = 0; i
if(str[i] == delimeter) ++liczba_wystapien;
};
std::string* wynik = new std::string [++liczba_wystapien];
unsigned licznik = 0;
int x = 0;
unsigned pozDelimeter;
for(int licznik = 0; x <= len; ++licznik) {
pozDelimeter = str.find(delimeter,x);
if(pozDelimeter == -1) pozDelimeter = len;
std::string substr = str.substr(x,(pozDelimeter-x));
wynik[licznik] = substr;
x = ++pozDelimeter;
};
return wynik;
}
Funkcja oczywiście działa, jednakże jestem świadomy że przy dłuższych stringach wejściowych moje pętle będą mało wydajne - a właśnie na dużych napisach chcę pracować.
Proszę o propozycje zoptymalizowania tego kodu przynajmniej odrobinę .