Разделить строку на массив в С++

Возможный дубликат:
Как разбить строку на С++?

У меня есть входной файл данных, и каждая строка является записью. в каждой строке каждое "поле" разделяется пробелом "", поэтому мне нужно разделить строку по пробелу. другие языки имеют функцию split (С#, PHP и т.д.), но я не могу найти ее для С++. Как я могу это достичь? Вот мой код, который получает строки:

string line;
ifstream in(file);

while(getline(in, line)){

  // Here I would like to split each line and put them into an array

}

Ответ 1

#include <sstream>  //for std::istringstream
#include <iterator> //for std::istream_iterator
#include <vector>   //for std::vector

while(std::getline(in, line))
{
    std::istringstream ss(line);
    std::istream_iterator<std::string> begin(ss), end;

    //putting all the tokens in the vector
    std::vector<std::string> arrayTokens(begin, end); 

    //arrayTokens is containing all the tokens - use it!
}

Кстати, используйте квалифицированные имена, такие как std::getline, std::ifstream, как я. Кажется, вы написали using namespace std где-то в своем коде, который считается плохой практикой. Поэтому не делайте этого:

Ответ 3

Попробуйте strtok. Найдите его в ссылке на С++:.

Ответ 4

Я написал функцию для моего simlar. может быть, вы можете его использовать!

std::vector<std::string> &split(const std::string &s, char delim, std::vector<std::string> &elems) 
{
    std::stringstream ss(s+' ');
    std::string item;
    while(std::getline(ss, item, delim)) 
    {
        elems.push_back(item);
    }
    return elems;
}

Ответ 5

В приведенном ниже коде используется strtok(), чтобы разбить строку на токены и сохранить токены в векторе.

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

using namespace std;


char one_line_string[] = "hello hi how are you nice weather we are having ok then bye";
char seps[]   = " ,\t\n";
char *token;



int main()
{
   vector<string> vec_String_Lines;
   token = strtok( one_line_string, seps );

   cout << "Extracting and storing data in a vector..\n\n\n";

   while( token != NULL )
   {
      vec_String_Lines.push_back(token);
      token = strtok( NULL, seps );
   }
     cout << "Displaying end result in  vector line storage..\n\n";

    for ( int i = 0; i < vec_String_Lines.size(); ++i)
    cout << vec_String_Lines[i] << "\n";
    cout << "\n\n\n";


return 0;
}

Ответ 7

Используйте stringstream или читайте токен с помощью токена из ifstream.

Чтобы сделать это с помощью stringstream:

string line, token;
ifstream in(file);

while(getline(in, line))
{
    stringstream s(line);
    while (s >> token)
    {
        // save token to your array by value
    }
}