首页 > 后端开发 > C++ > 递归程序在C++中插入一个星号在一对相同字符之间

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

WBOY
发布: 2023-09-04 12:57:13
转载
1451 人浏览过

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

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

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

示例

输入 - str1 = "happiness"

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

解释 - 在pp和ss之间添加*将得到结果字符串hap*pines*s

输入 - str1 = ”swimmmmingggg pooool”

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

解释 - 在mm、gg和oo之间添加*将得到结果字符串swim*m*m*ming*g*g*g po*o*o*ol

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

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

  • 将输入字符串作为str1,并计算其长度为len。

  • 函数addStar(string& s1, int i, int len1)接受s1、它的长度和当前索引作为输入,并在两对字符相同时添加*。

  • 将tmp1作为从索引0到i的子字符串。

  • 将tmp2作为从索引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 + &#39;*&#39; + 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
登录后复制

以上是递归程序在C++中插入一个星号在一对相同字符之间的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:tutorialspoint.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板