Maison > Article > développement back-end > Programme récursif pour insérer un astérisque entre une paire de caractères identiques en C++
Étant donné une chaîne str1 en entrée. Le but est d'insérer un "*" entre une paire de caractères identiques dans la chaîne d'entrée et de renvoyer la chaîne résultante en utilisant une méthode récursive.
Si la chaîne d'entrée est str1 = "wellness", alors la sortie sera "wel*lnes*s"
Input - str1 = "happiness"
Output - Add * La chaîne résultante : hap*pines*s
Explication - L'ajout de * entre pp et ss obtiendra la chaîne résultante hap*pines*s
Enter - str1 = "swimmmmingggg pooool"
Sortie - La chaîne après avoir ajouté * : swim*m*m*ming*g*g*g po*o*o*ol
Explication - Ajouter * entre mm, gg et oo obtiendra le résultat String swim* m*m*ming*g*g*g po*o*o*ol
Dans cette méthode, prenez la chaîne str1. À chaque itération, str1 est divisé en deux parties avec l'index actuel comme point médian. Si le dernier caractère de la première sous-chaîne est identique au premier caractère de la sous-chaîne suivante, alors la chaîne d'origine est définie sur la sous-chaîne 1 suivie de "*", suivie de la sous-chaîne 2. Si la longueur de la sous-chaîne 2 est 0, la récursion se termine.
Prenez la chaîne d'entrée comme str1 et calculez sa longueur comme len.
La fonction addStar(string& s1, int i, int len1) accepte s1, sa longueur et l'index actuel en entrée et ajoute * lorsque les deux paires de caractères sont identiques.
Prenez tmp1 comme sous-chaîne de l'index 0 à i.
Prenez tmp2 comme sous-chaîne de l'index i à len1+1.
Si le dernier caractère de tmp1 est égal au premier caractère de tmp2, définissez s1=tmp1+’*’+tmp2.
Appelez addStar(s1, i+1, len1) pour la prochaine itération.
Enfin, imprimez str1 dans la fonction principale.
#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; }
Si nous exécutons le code ci-dessus, il générera la sortie suivante
String after adding * : a*ab*bc*c*cd*d*d*d
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!