Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odpowiednik w C++ explode() z PHP

Ostatnio zmodyfikowano 2009-10-09 19:55
Autor Wiadomość
WunM
» 2009-10-07 15:46:45
Szybko pisane ale działa (przynajmniej mi).

C/C++
/// Dzieli wektor na części
///
/// @param  search   Wektor który ma by podzielony
/// @param  ch       Znak który oddziela części
/// @return          Wektor (vector<string>) który zawiera
///                  podzielone elementy
vector < string >
explode( vector < char > & search, char ch )
{
    // aktualny znaleziony element
    string str_find;
    // wektor ktory zostanie zwrócony
    vector < string > find;
    // iterator (oczywiście)
    vector < char >::iterator i = search.begin();
    for(; i < search.end(); i++ )
    {
        /* jeśli znaleziono znak dzielący
                       elementy */
        if( * i == ch )
        {
            // odłóż aktualny element
            find.push_back( str_find );
            // a następnie go wyzeruj
            str_find = "";
        }
        else
        /* inaczej dopisz do elementu
                       aktualną wartośc z
                       iteratora */
             str_find += * i;
       
    }
    return find;
}
P-10691
Thud
» 2009-10-09 18:40:34
Hmm... No dobra... a stringstream?? A referencje zmiennych (stringów) nie w returnie a paramatrach??
P-10733
DejaVu
» 2009-10-09 18:49:23
A co Twój post wnosi? Masz lepsze rozwiązanie? Zapodaj nim. Krytykować to najłatwiej.
P-10735
Thud
» 2009-10-09 20:52:18
Mam pewne rozwiązanie, ale muszę jeszcze nad nim trochę popracować, a jestem zmęczony.
P-10740
Thud
» 2009-10-10 11:53:44
Algorytm składa się z dwóch części (czytaj funkcji i procedury) która działa na statycznych tablicach stringów. Jedyny problem pojawia się, gdy przekraczamy zakres tablicy. Można of korz przeprogramować ten skrypt na vectora, bo rozwiązanie WunM'a jest ciekawsze.
C/C++
#include <iostream>
#include <cstring>
using namespace std;
string MainExplode( string Text, char Pause, int & TemporaryNumber ); //Główna część która pobiera łańcuch od danego miejsca do napotkania znaku pausowego
void Explode( string Text, char Pause, string * Array ); //rozbija stringa na części z użyciem MainExplode i własnego licznika (Temporary)
int main()
{
    string Array[ 7 ];
    Explode( "ABCD EFGH IJKL 1234 5678 9012 A1L2", ' ', Array );
    for( int A = 0; A < sizeof( Array ) / sizeof( string ); A++ ) cout << Array[ A ] << endl; //sizeof(obiekt_stringa)/sizeof(string) - ciekawe narzędzie do sprawdzania rozmiaru tablicy
   
    cin.get();
}
string MainExplode( string Text, char Pause, int & TemporaryNumber ) //trzeci argument pobiera referencje, aby móc "edytować" licznik
{
    string String; //zwracany tekst
    while( Text[ TemporaryNumber ] != Pause && Text[ TemporaryNumber ] != 0 ) String += Text[ TemporaryNumber ], TemporaryNumber++; //rozbijanie na części z użyciem licznika
   
    TemporaryNumber++; //increase licznika
    return String;
}
void Explode( string Text, char Pause, string * Array )
{
    int Temporary = 0;
    while( Temporary < Text.size() )
    {
        * Array = MainExplode( Text, Pause, Temporary );
        //cout<<*Array<<endl; //opcjonalnie - do sprawdzenia działania rozbicia
        Array++;
    }
}

post scriptum
Sugerowałem się reference PHP, nigdy tej funkcji nie używałem w PHP.

//edit:
Ehh, no nie, w komencie wkradło się to, co niegdyś nie działało. :P
Deleted.
P-10765
manfred
» 2009-10-06 21:57:21
Powodzenia w zwróceniu w jednym stringu kilku stringów.
P-19407
manfred
» 2009-10-09 19:55:24
A podobno to ja spamuję, nie ty :P. Wnosi (tak z 1000002 razy więcej niż twój) - jak ktoś zrozumie ten post, to sobie rzeczone lepsze rozwiązanie napisze.
P-19413
1 « 2 »
Poprzednia strona Strona 2 z 2