Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมแบบเรียกซ้ำเพื่อแทรกดาวระหว่างคู่ของอักขระที่เหมือนกันใน C++


รับสตริง str1 เป็นอินพุต เป้าหมายคือการแทรก '*' ระหว่างคู่ของอักขระที่เหมือนกันในสตริงอินพุตและส่งคืนสตริงผลลัพธ์โดยใช้วิธีการแบบเรียกซ้ำ

หากสตริงอินพุตเป็น str1="wellness" จากนั้นเอาต์พุตจะเป็น "wel*lnes*s"

ตัวอย่าง

ป้อนข้อมูล − str1="ความสุข"

ผลผลิต − String หลังจากเพิ่ม * :hap*pines*s

คำอธิบาย − การบวก * ระหว่างคู่ pp และ ss จะทำให้เราได้ผลลัพธ์เป็นสตริง hap*pines*s

ป้อนข้อมูล − str1=”swimmmminggggg พูออล”

ผลผลิต − String หลังจากเพิ่ม * :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 สิ้นสุดการเรียกซ้ำในกรณีที่ความยาวของ substring2 เป็น 0

  • นำสตริงอินพุตเป็น str1 และคำนวณความยาวเป็น len

  • ฟังก์ชัน addStar(string&s1, int i, int len1) รับ s1, ความยาวและดัชนีปัจจุบันเป็นอินพุต และเพิ่ม * หากอักขระสองคู่เหมือนกัน..

  • รับ tmp1 เป็นสตริงย่อยของ s1 จากดัชนี 0 ถึง i

  • รับ tmp2 เป็นสตริงย่อยของ s1 จากดัชนี i ถึง len1 + 1

  • หากอักขระตัวสุดท้ายของ tmp1 และอักขระตัวแรกของ tmp2 เท่ากัน ให้ตั้งค่า s1=tmp1+’*’+tmp2

  • โทร addStar(s1, i+1, len1); สำหรับการทำซ้ำครั้งต่อไป

  • ในตอนท้ายให้พิมพ์ 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