在JavaScript中,如果我们有一个带分隔符的字符串,我们可以用这种方式删除前导项:
console.log(('/dev/input/event11').split('/').slice(2).join('/'))
输出:input/event11
如何在C ++中执行此操作?
答案 0 :(得分:1)
这个答案并没有以同样的方式解决问题。我不认为将整个字符串拆分成一个数组是非常有效的,然后重新组合同一个数组,第一个元素丢失。那么为什么不简单地找到'/'的第二次出现?有了这个想法:
#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;
}
答案 1 :(得分:0)
基于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));
}
}
}