Split a string into an array in C++
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
How to split a string in C++?
我有一个数据输入文件,每行都是一个条目。在每一行中,每一个"字段"都由一个空格""分隔开,因此我需要将该行按空格拆分。其他语言有一个叫做拆分的函数(C语言,PHP等),但是我不能为C++找到一个函数。我怎样才能做到这一点?这是我得到行的代码:
1 2 3 4 5 6 7 8 | string line; ifstream in(file); while(getline(in, line)){ // Here I would like to split each line and put them into an array } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #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! } |
顺便说一下,像我一样使用限定名,如
- 为什么"使用名称空间标准"被认为是坏做法?
1 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
我已经为我的类似需求编写了一个函数,也许你可以用它!
1 2 3 4 5 6 7 8 9 10 | 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; } |
试试
下面的代码使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #include <iostream> #include #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 "; char *token; int main() { vector<string> vec_String_Lines; token = strtok( one_line_string, seps ); cout <<"Extracting and storing data in a vector.. "; while( token != NULL ) { vec_String_Lines.push_back(token); token = strtok( NULL, seps ); } cout <<"Displaying end result in vector line storage.. "; for ( int i = 0; i < vec_String_Lines.size(); ++i) cout << vec_String_Lines[i] <<" "; cout <<" "; return 0; } |
使用
要使用Stringstream执行此操作:
1 2 3 4 5 6 7 8 9 10 11 | string line, token; ifstream in(file); while(getline(in, line)) { stringstream s(line); while (s >> token) { // save token to your array by value } } |
最好使用与几乎标准库Boost的C++。
举个例子:http://www.boost.org/doc/libs/1_48_0/doc/html/string_algo/usage.html id3115768