如何一次从字符串中删除一个字符?

新手上路,请多包涵

我试图弄清楚如何一次从字符串中删除一个字符,以便我可以获得一次只丢失一个字符的字符串的所有版本。这就是我试图做的工作,但无济于事。

 for(int i = 0 ; i < s.length() ; i++){
    tmp.erase(0, i);
    std::cout << tmp << std::endl;
    s.at(i)++;
}

它显然适用于第一个,但随后删除了其余部分。 JON 的预期输出应该是 ON JN JO

原文由 Gman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 374
1 个回答

最简单的方法是每次复制字符串,并修改副本:

 for(std::string::size_type i = 0 ; i < s.size() ; i++){
    auto tmp=copy;
    tmp.erase(i, 1);
    std::cout << tmp << std::endl;
}

For correctness, the index variable should be a std::string::size_type , what both length() and size() return (with size_t and size() 自然属于一起)。

您的代码几乎是正确的,只是它忽略了每次都复制字符串,而且 s.at(i)++ 不属于那里。

原文由 Sam Varshavchik 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题