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

WBOY
WBOY 转载
2023-09-04 12:57:13 1052浏览

递归程序在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 + '*' + 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,如有侵犯,请联系admin@php.cn删除