将JavaScript split() - slice() - join()序列转换为C ++

时间:2014-01-16 19:10:36

标签: javascript c++ arrays string split

在JavaScript中,如果我们有一个带分隔符的字符串,我们可以用这种方式删除前导项:

console.log(('/dev/input/event11').split('/').slice(2).join('/'))

输出:input/event11

如何在C ++中执行此操作?

2 个答案:

答案 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));
      }
   }
}