Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何获取字符串的所有1位或相邻2位组合_C++_Templates_C++11_Stl - Fatal编程技术网

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

C++ 如何获取字符串的所有1位或相邻2位组合,c++,templates,c++11,stl,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

假设我有一个字符串
“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;
}
void go(整数i、常量字符串&s、字符串res){
如果(i==s.length()){

cout不应该太难-到目前为止您尝试了什么?一个相当标准的递归算法应该可以在这里工作。使用regions似乎有些过分-有更简单的方法。正如@Phylogenesis所说,考虑一种递归方法-从字符串中提取前一个或两个字符,然后递归地处理每个字符的剩余部分两种情况。那么,为什么不简单地运行一个循环,提取两个相邻的数字,然后分别提取所有的单个数字呢?