c++ - 如何获取字符串的所有 1 位或相邻的 2 位数字组合

标签 c++ templates c++11 stl

假设我有一个字符串 "12345" 我应该获取该字符串的所有 1 位或相邻的 2 位数字组合,例如:

1 2 3 4 5
12 3 4 5
1 23 45 
12 3 45 
12 34 5 
...

请注意,我将它们分组为不同数量的字符,但没有更改它们的顺序。我需要一个方法/函数来做到这一点。

关于如何实现这个的任何想法。

最佳答案

你可以用递归的方式来做。让我们将 Ln 定义为一个函数,用于计算我们可以通过这种方式将字符拼接在一起的所有方式。想象一下你在最后一个角色。你有两个选择,要么单独使用这个字符,这样我们就剩下 Ln-1 方法来完成剩下的事情,要么使用这个字符和它之前的那个,这样我们就剩下 Ln-2 个字符。使用这种方法,我们可以得出如下代码:

void go(int i, const string &s, string res){
    if (i == s.length()) {
        cout << res << endl;
        return;
    }

    go(i + 1, s, res + s[i] + " ");
    if (i + 1 < s.length())
        go(i + 2, s, res + s[i] + s[i + 1] + " ");
}

int main()
{
    string s = "1234";
    go(0, s, "");
    return 0;
}

关于c++ - 如何获取字符串的所有 1 位或相邻的 2 位数字组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32967489/

相关文章:

c++ - Clang++ 不理解 mac 终端中的 c++11

c++ - DRD 在 std::mutex::lock 上报告 "conflicting load"错误

c++ - 如何在 C++ 中扩展动态分配的数组?

c++ - C++ 11-修改结构 vector 中的结构成员

android - 无法构建 OpenCV Android 示例项目

c++ - 以编程方式调用 "Save to PDF..."工作表

c++ - 通用/模板编程最佳实践 : To limit types, 或不限制类型

c++ - 如何轻松覆盖多个重载方法?

c++ - 需要 "override"案例时重叠模板部分特化 : how to avoid the error?

c++ - 聚合初始化 - vector 和数组