Разделить строку на массив в С++
Возможный дубликат:
Как разбить строку на С++?
У меня есть входной файл данных, и каждая строка является записью. в каждой строке каждое "поле" разделяется пробелом "", поэтому мне нужно разделить строку по пробелу. другие языки имеют функцию 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
где-то в своем коде, который считается плохой практикой. Поэтому не делайте этого:
Ответ 2
vector<string> v;
boost::split(v, line, ::isspace);
http://www.boost.org/doc/libs/1_48_0/doc/html/string_algo/usage.html#id3115768
Ответ 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;
}
Ответ 6
С++ лучше всего использовать с повышением почти стандартной библиотеки.
И пример:
http://www.boost.org/doc/libs/1_48_0/doc/html/string_algo/usage.html#id3115768
Ответ 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
}
}