首页 文章资讯内容详情

在 C++ 中的一对相同字符之间插入星号的递归程序

2026-06-02 2 花语

给定一个字符串str1作为输入。目标是在输入字符串中的一对相同字符之间插入一个“*”,并使用递归方法返回结果字符串。

如果输入字符串是str1="wellness"那么输出将是"wel*lnes*s"

例子

输入 -str1="幸福"

输出 -添加*后的字符串:hap*pines*s

说明 -在pp和ss对之间添加*将为我们提供结果字符串hap*pines*s

输入 -str1=”swimmmminggggpooool”

输出 -添加*后的字符串:swim*m*m*ming*g*g*gpo*o*o*ol

说明-在mm、gg和oo对之间添加*将为我们提供结果字符串游泳*m*m*ming*g*g*gpo*o*o*ol

下面程序中使用的方法如下

在这种方法中采用字符串str1。在每次迭代中,以当前索引为中点将str1一分为二。如果第一个子串的最后一个字符与下一个子串的第一个字符相同,则将原始字符串设置为子串1后跟*后跟子串2。如果substring2的长度为0,则结束递归。

取输入字符串为str1,计算长度为len。

函数addStar(string&s1,inti,intlen1)将s1、其长度和当前索引作为输入,如果两对字符相同,则添加*。

将tmp1作为s1从索引0到i的子串

将tmp2作为s1从索引i到len1+1的子串。

如果tmp1的最后一个字符和tmp2的第一个字符相等,则设置s1=tmp1+*+tmp2。

调用addStar(s1,i+1,len1);用于下一次迭代。

最后在main中打印str1。

示例

#include <iostream> using namespace std; void addStar(string& s1, int i, int len1){ string tmp1=s1.substr(0,i); string tmp2=s1.substr(i,len1+1); if (tmp2.length() == 0){ return; } if (tmp1[i-1] == tmp2[0]){ s1 = tmp1 + * + tmp2; } addStar(s1, i+1, len1); } int main(){ string str1 = "aabbcccdddd"; int len=str1.length(); addStar(str1, 0, len-1); cout << "String after adding * : "<<str1 << endl; return 0; }输出结果

如果我们运行上面的代码,它将生成以下输出

String after adding * : a*ab*bc*c*cd*d*d*d