可能重复:
在 C++ 中拆分字符串
我需要一个分裂的功能。
必须像这样工作:
buffer = split(str, ' ');
我搜索了一个拆分函数,尝试了 boost 库,但一切都不好:/
标准 c 库中的 strtok() 非常好,可以满足您的需求。除非你热衷于从多个线程中使用它并且担心函数不能重入,我不怀疑这里是这种情况。
PS 上面假设您有一个字符数组作为输入。如果它是 c++ 字符串,您仍然可以在使用 strtok 之前使用 string.c_str 来获取 c 字符串
升压库应该也可以工作。
像这样使用它:
vector <string> buffer;
boost::split(buffer, str_to_split, boost::is_any_of(" "));
补充:
确保包括算法:
#include <boost/algorithm/string.hpp>
将其打印到 std::cout ,如下所示:
vector<string>::size_type sz = buffer.size();
cout << "buffer contains:";
for (unsigned i=0; i<sz; i++)
cout << ' ' << buffer[i];
cout << '\n';
我想strtok()
这就是你要找的。
它允许您始终返回由给定字符分隔的第一个子字符串:
char *string = "Hello World!";
char *part = strtok(string, " "); // passing a string starts a new iteration
while (part) {
// do something with part
part = strtok(NULL, " "); // passing NULL continues with the last string
}
请注意,此版本不得同时在多个线程中使用(还有一个版本(strtok_s()
,此处有更多详细信息),它有一个附加参数,可以使其在并行化环境中工作)。对于您想在循环中拆分子字符串的情况也是如此。