在JavaScript中,如果我们有一个带分隔符的字符串,我们可以这样删除前导项目:
console.log(('/dev/input/event11').split('/').slice(2).join('/'))
输出:input/event11
我如何在C++中做到这一点?
发布于 2014-01-17 04:16:25
这个答案并不是以同样的方式来解决这个问题。我不认为将整个字符串拆分成一个数组,然后在第一个元素丢失的情况下重新组合相同的数组是非常有效的。那么为什么不简单地找到'/‘的第二次出现呢?带着这样的想法:
#include <string>
#include <iostream>
using namespace std;
int main(int argc,char *argv[])
{
string s = "/dev/input/event11";
int index = 0,num_slash = 0;
for(string::iterator i = s.begin();i != s.end() && num_slash < 2;i++,index++)
{
if(*i == '/') num_slash++;
}
cout << s.substr(index) << endl;
}发布于 2014-01-17 18:26:44
基于waTeim的思想,但使用标准函数:
int main()
{
string s = "/dev/input/event11";
// Find second slash.
int num_slash = 0;
auto iter = std::find_if(begin(s), end(s),
[&](char c) { if(c=='/') ++num_slash; return num_slash==2; });
if (iter != end(s) ++iter; // Don't include second /
std::cout << std::string(iter, end(s));
}另一种选择(不太灵活)
int main()
{
string s = "/dev/input/event11";
auto iter = std::find(begin(s), end(s), '/');
if (iter != end(s)) {
iter = std::find(++iter, end(s), '/');
if (iter != end(s) {
std::cout << std::string(++iter, end(s));
}
}
}https://stackoverflow.com/questions/21170727
复制相似问题