Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: oriana_anairo en 16 Septiembre 2016, 04:37 AM

Título: ¿Comó usar strtok con listas de la biblioteca <vector>?
Publicado por: oriana_anairo en 16 Septiembre 2016, 04:37 AM
Estoy trabajando con la biblioteca vector, y quiero separa una cadena de caracteres que se encuentra en una lista, creada con push_back, pero cuando uso strtok (ListaDondeSeGuarada=strtok(ListaDeCadenasDondeSeSepara," ");)
me tira error.
Título: Re: ¿Comó usar strtok con listas de la biblioteca <vector>?
Publicado por: crack81 en 16 Septiembre 2016, 04:54 AM
Hola si estas usando C++ puedes quizas te puedan servir alguno de estos dos enlaces

http://stackoverflow.com/questions/236129/split-a-string-in-c (http://stackoverflow.com/questions/236129/split-a-string-in-c)

http://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c (http://stackoverflow.com/questions/14265581/parse-split-a-string-in-c-using-string-delimiter-standard-c)

SALUDOS
Título: Re: ¿Comó usar strtok con listas de la biblioteca <vector>?
Publicado por: ivancea96 en 16 Septiembre 2016, 14:41 PM
strtok es una función de C para trabajar con cadenas de caracteres (char*).

Lo que puedes hacer, es utilizar la función "find" de la librería algorithm:

Código (cpp) [Seleccionar]
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;


int main(){
vector<string> vec = {"a", "b", "ab", "b", "c", "ab", "d", "e"};
auto tokenIterator = find(vec.begin(), vec.end(), "ab");
if(tokenIterator == vec.end()){
// No encontrado
}else{
vector<string> temp(vec.begin(), tokenIterator);
for(string& str : temp)
cout << str << endl;
}
}


http://www.cplusplus.com/reference/algorithm/find/ (http://www.cplusplus.com/reference/algorithm/find/)


También puedes usar "find_first_of", en caso de que tengas varios tokens.

Código (cpp) [Seleccionar]
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;


int main(){
vector<string> vec = {"a", "b", "ab", "b", "c", "ab", "d", "e"};
vector<string> tokens = {"ab", "ac"};

auto tokenIterator = find_first_of(vec.begin(), vec.end(),
                                      tokens.begin(), tokens.end());
if(tokenIterator == vec.end()){
// No encontrado
}else{
vector<string> temp(vec.begin(), tokenIterator);
for(string& str : temp)
cout << str << endl;
}
}


http://www.cplusplus.com/reference/algorithm/find_first_of/ (http://www.cplusplus.com/reference/algorithm/find_first_of/)



Como dato, en la STL de C++, todos los contenedores trabajan con iteradores, y las funciones para trabajar con iteradores, también suelen hacerlo.