He leído http://www.codeproject.com/KB/recipes/Tokenizer.aspx y quiero tener el último ejemplo (al final, justo antes de todos los gráficos) "Extender predicados delimitador" en mi principal, pero no obtengo los mismos tokens de salida que el autor del artículo hace cuando asigno token_list a un vector, ¿por qué?¿Cómo tener una "división personalizada()" en una lista con strtk?
¿Cómo poner el resultado real en una lista o un vector? Quiero tener esto:
- abc List0
- lista1 123, mno xyz
- lista2 i \, jk
Pero tengo algo como:
- List0 abc ; "123, mno xyz", i \, jk
- list1 123, mno xyz ", i \, jk
- lista2 i \, jk
muestra Fuente:
class extended_predicate
{
public:
extended_predicate(const std::string& delimiters)
: escape_(false),
in_bracket_range_(false),
mdp_(delimiters)
{}
inline bool operator()(const unsigned char c) const
{
if (escape_)
{
escape_ = false;
return false;
}
else if ('\\' == c)
{
escape_ = true;
return false;
}
else if ('"' == c)
{
in_bracket_range_ = !in_bracket_range_;
return true;
}
else if (in_bracket_range_)
return false;
else
return mdp_(c);
}
inline void reset()
{
escape_ = false;
in_bracket_range_ = false;
}
private:
mutable bool escape_;
mutable bool in_bracket_range_;
mutable strtk::multiple_char_delimiter_predicate mdp_;
};
int main()
{
std::string str = "abc;\"123, mno xyz\",i\\,jk";
strtk::std_string::token_list_type token_list;
strtk::split(extended_predicate(".,; "),
str,
std::back_inserter(token_list),
strtk::split_options::compress_delimiters);
return 0;
}
utilizo VisualStudio 2010 Ultimate. – Nazka
He intentado con vc10. '" cl -Dstrtk_no_tr1_or_boost -DWIN32 -I "C: \ Program Files \ Boost_1_46_0" -I. test.cxx "'. Pero obtuve los mismos resultados. (Funciona bien) – mattn
Cuando pongo token_list en un vector, por ejemplo, no tengo el buen resultado. Y cuando veo los valores de token_list en el modo set set, tengo los valores que escribí y no los 3 valores correctos. ¿Cómo puedo poner los valores reales en un vector, por ejemplo? – Nazka