[C++] Optymalizacja funkcji operującej na stringach


(Mariano3) #1

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ę :slight_smile: .


(inż. Piniol) #2

http://www.google.pl/search?q=c%2B%2B+php+explode

Ewentualnie zajrzeć do źródeł PHP, kóry jest napisany w C++ :wink: