» »

[cpp]Kako ugotoviti koliko zapisov je v arrayu?

[cpp]Kako ugotoviti koliko zapisov je v arrayu?

*ziga* ::

Zivjo.
Sam sem si na hitro spisal funkcijo explode s pomocjo knjiznice string in zdaj me matra kako ugotoviti koliko rezultatov je vrnilo...

Zdaj ena resitev bi bila da bi pristel vse deltimerje in dodal 1
Ali pa da bi inkrementiral doloceno globalno spremljivko v loopu ampak jaz iscem bolj 'fancy' resitev.

Tule je vsa koda in seveda so tudi predlogi kako zbolsat to kodo dobrodosli.

#include <iostream>
#include <string>
using namespace std;
string * explode(string str, string deltimer);

int main ()
{
string * resp;

resp = explode("test1:test2:test3", ":");

return 0;
}

string * explode(string str, string deltimer){
int DelCount=0;
int ArrayPos=0;
int DeltPos=0;
int CharPos=0;
int ToRaise=0;
string TempStr;
for(int i=0; i < str.size(); i++){
if(str.at(i) == *deltimer.c_str()) DelCount++;        
}
string * output;
output = new string[DelCount+1];

while(str.find(deltimer,CharPos) != string::npos){
DeltPos = str.find(deltimer,CharPos);
ToRaise = DeltPos-CharPos;
TempStr = str.substr(CharPos,ToRaise);                          
output[ArrayPos] = TempStr;
CharPos += ToRaise+1;
ArrayPos++;
}
output[ArrayPos] = str.substr(CharPos);
return output;   
}


LP

repo ::

imas to cppx0, da ima explode funkcijo (stl je afaik nima)?
a sizeof(array) pa nebi slo?

technolog ::

Ena opcija je da daješ rezultate v STL vector, namesto v array stringov. Pa tudi pohitriš lahko kodo, ker ti prej ni treba preštet, koliko bo rezultatov.

Drgač pa tole je dost gnila koda, to funkcijo je mogoče napisat v recimo max petih vrsticah (če vzamemo da je delimiter lahko samo en znak).

*ziga* ::

@repo
sizeof vedno vrne 4 neglede na vsebino.Drugace pa to funckijo sem spisal sam...

@technolog
Ja razmisljal sem ze v vectorjih ampak hocem cimbolj omejiti uporabo drugih knjiznic, da bi reduciral velikost exeja.
Drugace pa lahko pokazes kako se to spise v 5ih vrsticah...

Mavrik ::

Vector je v standardni C++ knjižnici pa se ga praktično _vedno_ uporablja namesto arrayev (Disclaimer: common sense applies) glih zaradi problemov, ko jih imaš ti.

Drugače neke pametne rešitve o tem kako prešteti število elementov v arrayu za C/C++ ni, saj jezika ne sledita velikosti alociranega prostora in ne moreš ugotoviti kdaj boš šel čez mejo če nimaš ending delimiterja (ki ti naredi več problemov in štale kot je uporaba STL containterjev kot je Vector).
The truth is rarely pure and never simple.

*ziga* ::

Sem na netu nasel tole kodo
void StringExplode(string str, string separator, vector<string>* results){
    int found;
    found = str.find_first_of(separator);
    while(found != string::npos){
        if(found > 0){
            results->push_back(str.substr(0,found));
        }
        str = str.substr(found+1);
        found = str.find_first_of(separator);
    }
    if(str.length() > 0){
        results->push_back(str);
    }
}


In deluje OK - vector.size() vrne pravilo stevilko stvari.

LP

technolog ::

Tole je ok koda, deluje tudi če je separator večznakovni. Če rabiš samo en znak, se da kodo neprimerno pohitrit.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Zanka z zajemanjem števk

Oddelek: Programiranje
61059 (744) misticnimrk
»

[JAVA] String problem!

Oddelek: Programiranje
151563 (1260) Sergio
»

[NALOGA] Java: Rekurzija

Oddelek: Programiranje
5896 (710) Spura
»

C++ preštej število enk

Oddelek: Programiranje
111224 (1007) kihc
»

razložitev nekaterij elementov v visual studio 05

Oddelek: Programiranje
71981 (1786) darkolord

Več podobnih tem