首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JavaScript split()-slice()-join()序列转换为C++

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

Stack Overflow用户
提问于 2014-01-17 03:10:36
回答 2查看 971关注 0票数 1

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

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

输出:input/event11

我如何在C++中做到这一点?

EN

回答 2

Stack Overflow用户

发布于 2014-01-17 04:16:25

这个答案并不是以同样的方式来解决这个问题。我不认为将整个字符串拆分成一个数组,然后在第一个元素丢失的情况下重新组合相同的数组是非常有效的。那么为什么不简单地找到'/‘的第二次出现呢?带着这样的想法:

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2014-01-17 18:26:44

基于waTeim的思想,但使用标准函数:

代码语言:javascript
复制
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));
}

另一种选择(不太灵活)

代码语言:javascript
复制
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));
      }
   }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21170727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档