返回信息流题目:用tokens里面的字符串去分割字符串s,tokens里面的字符串用'|'隔开
例如: tokesn = "de|789|43|uyt"
对于 s = "abcdeflkf4398fd789ds32uytsst"
分割后的结果为 "abc" "lkf" "98fd" "ds32" "sst"
这是一条镜像帖。来源:北邮人论坛 / cpp / #94015同步于 2016/11/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求一个字符串分割的算法
byr10086
2016/11/22镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
www.cplusplus.com/reference/cstring/strtok/
【 在 byr10086 (nieng) 的大作中提到: 】
: 能详细点吗?
【 在 specops 的大作中提到: 】
: www.cplusplus.com/reference/cstring/strtok/
现在的问题要比 strtok 复杂
【 在 byr10086 的大作中提到: 】
:
: 现在的问题要比 strtok 复杂
c++写的,没考虑重复的token等情况,不过大概是这个意思
```
string tokens = "de|789|43|uyt", s = "abcdeflkf4398fd789ds32uytsst",buffer;
stringstream ss;
vector<string> ds,result;
ss << tokens;
while (getline(ss,buffer,'|'))
ds.push_back(buffer);
vector<pair<size_t, size_t>> v;
for (auto &i : ds)
v.emplace_back(make_pair(s.find(i),i.length()));
sort(begin(v), end(v), [](auto p1, auto p2) {return p1.first < p2.first; });
size_t offset = 0;
for (auto &i : v) {
result.emplace_back(s.substr(offset, i.first-offset));
offset = i.first + i.second;
}
result.emplace_back(s.substr(offset));
```
秀一下Python语言:
>>> import re
>>> re.split(r'de|789|43|uyt', "abcdeflkf4398fd789ds32uytsst")
['abc', 'flkf', '98fd', 'ds32', 'sst']
【 在 specops 的大作中提到: 】
: c++写的,没考虑重复的token等情况,不过大概是这个意思
: ```
: [code=c]
: ...................
应该是这样了