2010-11-12 60 views
5

Duplicar posible:
How do I tokenize a string in C++?Dividir una línea en C/C++ utilizando los espacios en blanco como separador

pseudocódigo:

Attributes[] = Split line(' ') 

¿Cómo?

He estado haciendo esto:

char *pch; 
    pch = strtok(line," "); 
    while(pch!=NULL) 
    { 
     fputs (pch, stdout); 


    } 

y conseguir un,, archivo de salida pegado no escrita. ¿Hay algo mal con esto? Bueno, la cosa ni siquiera está cumpliendo con mi requisito de pseudocódigo, pero estoy confundido acerca de cómo indexar tokens (como matrices de caracteres) en mi matriz, ¿supongo que debería escribir una matriz de 2 dim?

+3

La solución es diferente dependiendo de si se está utilizando C o C++. – dreamlax

+17

¿Qué tal algunos de los ejemplos de los siguientes: http://www.codeproject.com/KB/recipes/Tokenizer.aspx Son muy eficientes y algo elegantes. La biblioteca String Toolkit hace que el complejo procesamiento de cadenas en C++ sea simple y fácil. –

Respuesta

5

Esto no es todo un dup - para C++ ver y votar la respuesta aceptada here por @Zunino.

Código básico a continuación, pero para ver la elegancia gloriosa completa de la respuesta, tendrá que hacer clic en ella.

#include <iostream> 
#include <string> 
#include <sstream> 
#include <algorithm> 
#include <iterator> 

int main() { 
    using namespace std; 
    string sentence = "Something in the way she moves..."; 
    istringstream iss(sentence); 
    copy(istream_iterator<string>(iss), 
      istream_iterator<string>(), 
      ostream_iterator<string>(cout, "\n")); 
} 

Esto depende del hecho de que, por defecto, istream_iterator golosinas espacios en blanco como su separador. Los tokens resultantes se escriben en cout en líneas separadas (por separador especificado en la sobrecarga del constructor para ostream_iterator).

+0

Lo usé, gracias. – andandandand

8

Use strtok con " " como delimitador.

+0

Eso es genial para C, para C++ vea la pregunta relacionada en mi respuesta. –

1

El método más fácil es boost::split:

std::vector<std::string> words; 
boost::split(words, your_string, boost::is_space()); 
Cuestiones relacionadas