Rumah > Artikel > pembangunan bahagian belakang > Program rekursif untuk memasukkan asterisk antara sepasang aksara yang sama dalam C++
Diberi rentetan str1 sebagai input. Matlamatnya adalah untuk memasukkan "*" antara sepasang aksara yang sama dalam rentetan input dan mengembalikan rentetan yang terhasil menggunakan kaedah rekursif.
Jika rentetan input ialah str1 = "kesejahteraan", maka outputnya ialah "wel*lnes*s"
Input - str1 = "kebahagiaan"🜎
Tambah kebahagian * Rentetan yang terhasil: hap*pines*sPenjelasan
- Menambah * antara pp dan ss akan mendapat rentetan yang terhasilhap*pines*sEnter
- str1 = "pooommmingggg- Rentetan selepas menambah *: berenang*m*m*ming*g*g*g po*o*o*ol
Penjelasan - Menambah * antara mm, gg dan oo akan mendapat keputusan Rentetan
berenang* m*m*ming*g*g*g po*o*o*olKaedah yang digunakan dalam program berikut adalah seperti berikutDalam kaedah ini, ambil rentetan str1. Dalam setiap lelaran, str1 dibahagikan kepada dua bahagian dengan indeks semasa sebagai titik tengah. Jika aksara terakhir subrentetan pertama adalah sama dengan aksara pertama subrentetan seterusnya, maka rentetan asal ditetapkan kepada subrentetan 1 diikuti dengan "*", diikuti dengan subrentetan 2. Jika panjang subrentetan 2 ialah 0, rekursi tamat.
Ambil rentetan input sebagai str1 dan hitung panjangnya sebagai len.
Fungsi addStar(rentetan& s1, int i, int len1) menerima s1, panjangnya dan indeks semasa sebagai input dan menambah * apabila kedua-dua pasangan aksara adalah sama.
Ambil tmp1 sebagai subrentetan daripada indeks 0 hingga i.
Ambil tmp2 sebagai subrentetan daripada indeks i kepada len1+1.
Jika aksara terakhir tmp1 adalah sama dengan aksara pertama tmp2, tetapkan s1=tmp1+’*’+tmp2.
Panggil addStar(s1, i+1, len1) untuk lelaran seterusnya.
Akhirnya cetak str1 dalam fungsi utama.
Contoh
#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
Atas ialah kandungan terperinci Program rekursif untuk memasukkan asterisk antara sepasang aksara yang sama dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!