我需要一个分裂功能。
必须像这样工作:
buffer = split(str, ' ');
我搜索了一个拆分函数,尝试了升级库,并且所有工作都很糟糕:/
答案 0 :(得分:1)
strtok()非常好,可以满足您的需求。除非你热衷于从多个线程中使用它并担心函数不是重入的,我不怀疑这种情况。
P.S。假设您有一个字符数组作为输入。如果是c ++字符串,仍然可以在使用strtok之前使用string.c_str来获取c字符串
答案 1 :(得分:1)
boost lib也应该有用。
像这样使用它:
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';
答案 2 :(得分:-1)
我猜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()
,more details here),它具有一个附加参数,使其在并行环境中工作)。对于您希望在循环中拆分子字符串的情况也是如此。