lauantai 23. elokuuta 2008

php explode() ja rtrim() funktiot C++:aan ja C:hen.



Kohta 30 vuotisen taipaleeni varrella olen ehtinyt puuhastella monenmoista. Muun muassa tehnyt virheitä php:llä, mistä todisteena on CWF Freeware. Php:ssä on paljon hienoja funktioita stringien käsittelyyn, ja noita kaipailin joskus C/C++ kielissäkin. No nuorena miehenä koodailin omat versioni noista. Ja vaikka ne on koodattu urani aamunkoitossa, eivätkä luultavasti ole parhaita mahdollisia toteutuksia, on ne kuitenkin toimivia. Ja ajattelin, että kun kerran minä noita kaipasin, niin miksein joku muukin. Joten tässä tulee:

explode() for C++:

#include <iostream>
#include <vector>
#include <string>

using std::string;
using std::vector;


int explode(string tear_me,string cut,vector &store)
{
unsigned int start=0;
int len=0;
int i=0;
vector<string> temp;

len=cut.length();
if(tear_me.find(cut)==string::npos)
{
return -1;
}
while( (start=tear_me.find(cut))!=string::npos)
{
temp.push_back(tear_me.substr(0,start));
tear_me.erase(0,start+len);
i++;
}
temp.push_back(tear_me);
store=temp;
return i;
}


rtrim() for C:

#include <string.h>

/**
\brief removes trailing whitespaces and tabs from a string.
\returns number of characters removed
*/
int trim(char *text)
{
int i;
int len;
int retval=0;
len=strlen(text);
for
(
i=len-1;
i>=0&&( text[i]==' ' || text[i]=='\t' );
i--
)
{
text[i]=(char)0;
retval++;
}
return retval;
}


rtrim on kevennetty versio. Se poistaa vain tabulaattorit ja välilyönnit, mutta yhden argumentin lisäyksellä, ja for ehdon pienellä muokkauksella saavutettaisiin php rtrim():n koko toiminnallisuus. (eli mahdollisuus poistaa myös muita merkkejä).

Ei kommentteja: