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

สตริงย่อยต่างๆ ในสตริงที่ขึ้นต้นและลงท้ายด้วยสตริงที่กำหนดใน C++ Program


ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่ค้นหาจำนวนสตริงย่อยทั้งหมดที่เริ่มต้นและสิ้นสุดด้วยสตริงที่กำหนด

เราได้รับหนึ่งสตริงและสองสตริงย่อย เราจำเป็นต้องค้นหาจำนวนสตริงย่อยที่แตกต่างกันซึ่งเริ่มต้นและสิ้นสุดด้วยสองสตริงย่อยที่กำหนด มาดูตัวอย่างกัน

ป้อนข้อมูล

str = "getmesomecoffee"
start = "m"
end = "e"

ผลผลิต

6

มีสตริงย่อยที่แตกต่างกันทั้งหมด 6 รายการในสตริงที่ระบุ พวกเขาคือ ฉัน เมโซ เมโซเมคคอฟฟี่ เมโซเม่คอฟฟี่ เมคอฟฟี่ เมคอฟฟี่

มาดูขั้นตอนการแก้ปัญหากัน

  • เริ่มต้นสตริง

  • วนซ้ำบน str และค้นหาดัชนีสตริงย่อยเริ่มต้นและสิ้นสุด เก็บไว้ในอาร์เรย์ที่แยกจากกัน

  • เริ่มต้นชุดเพื่อจัดเก็บสตริงย่อยต่างๆ

  • วนซ้ำบน str.

    • ตรวจสอบว่าดัชนีปัจจุบันตรงกับสตริงเริ่มต้นของอาร์เรย์ที่เราสร้างไว้ก่อนหน้านี้หรือไม่

    • หากเราพบดัชนีสตริงเริ่มต้น ให้ค้นหาสตริงสิ้นสุด

    • เพิ่มสตริงทั้งหมดจนกว่าเราจะพบจุดสิ้นสุดของตัวแปร

    • เมื่อเราพบสตริงสิ้นสุด ให้เพิ่มจำนวนสตริงย่อยและเพิ่มสตริงย่อยลงในชุด

    • รีเซ็ตตัวแปรสตริงย่อย

  • พิมพ์จำนวนสตริงย่อย

ตัวอย่าง

มาดูโค้ดกันเลย

#include <bits/stdc++.h>
using namespace std;
int getSubstringsCount(string str, string start, string end) {
   int substrings_count = 0, str_length = str.size(), start_length = start.size(), end_length = end.size();
   int start_matches_index[str_length] = {0}, end_matches_index[str_length] = {0};
   for (int i = 0; i < str_length; i++) {
      if (str.substr(i, start_length) == start) {
         start_matches_index[i] = 1;
      }
      if (str.substr(i, end_length) == end) {
         end_matches_index[i] = 1;
      }
   }
   set<string> substrings;
   string current_substring = "";
   for (int i = 0; i < str_length; i++) {
      if (start_matches_index[i]) {
         for (int j = i; j < str_length; j++) {
            if (!end_matches_index[j]) {
               current_substring += str[j];
            }
            if (end_matches_index[j]) {
               current_substring += str.substr(j, end_length);
               if (substrings.find(current_substring) == substrings.end()) {
                  substrings_count++;
               }
               substrings.insert(current_substring);
            }
         }
         current_substring = "";
      }
   }
   return substrings_count;
}
int main() {
   string str = "getmesomecoffee";
   string start = "m";
   string end = "e";
   cout << getSubstringsCount(str, start, end) << endl;
   return 0;
}

ผลลัพธ์

หากคุณรันโปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้

6

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น