Muotoa
"kirja istuin eläin maantie eilinen syksy"
oleva merkkijono pitäisi saada vector<std::string> muotoon
vec{ "kirja", "eläin", "maantie", "eilinen", "syksy"}
Olen kokeillut
std::vector<std::string> str_to_vec(char* c)
{
std::vector<std::string> vec;
char *token;
char *rest = c;
while((token = strtok_r(rest, " ", &rest)))
{
vec.push_back(std::string(trim(token)));
}
return vec;
}
Mutta se näyttää vaikutavan alkuperäiseen parametrina tulevaan merkkijonoon
Netistä ei oikein löydy hyvää eaimerkkiä strtok-funktiosta tai sitten kukaan ei välitä, mitä alkuperäiselle merkkijonolle tapahtuu?
Voisiko tässä kutsussa olevan *c parametrin jotenkin korvata niin, että strtok ei pääsisi käsiksi alkuperäiseen merkkijonoon niin, että merkkijono muuttuu? Tai olisiko joku muu tapa saada välilyönnein erotellut sanat char-merkkijonosta sanavektoriksi.
Muokk.
En millään saanut strtok -funktiota selvitetyksi. Vaihtoehtona yritin seuraavaa, toivottavasti siinä ei ole mitään ikäviä yllätyksiä tai liikaa hitautta verrattuna valmiiseen funktioon.
std::vector<std::string> str_to_vec(char* cptr)
{
std::vector<std::string> vec;
std::string tok = "";
while( *cptr != '\0')
{
if(*cptr == ' ' && tok != "")
{
vec.push_back(trim(tok));
tok = "";
cptr ++;
continue;
}
else
{
tok += *cptr;
cptr++;
if( *cptr == '\0')
{
vec.push_back(trim(tok));
}
}
}
return vec;
}