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所说,考虑一种递归方法-从字符串中提取前一个或两个字符,然后递归地处理每个字符的剩余部分两种情况。那么,为什么不简单地运行一个循环,提取两个相邻的数字,然后分别提取所有的单个数字呢?