Computer >> Máy Tính >  >> Lập trình >> C ++

Các chuỗi con khác nhau trong một chuỗi bắt đầu và kết thúc bằng các chuỗi đã cho trong Chương trình C ++

Trong hướng dẫn này, chúng ta sẽ viết một chương trình tìm tổng số chuỗi con bắt đầu và kết thúc bằng các chuỗi đã cho.

Chúng tôi được cung cấp một chuỗi và hai chuỗi con. Chúng ta cần tìm số lượng chuỗi con khác nhau bắt đầu và kết thúc bằng hai chuỗi con đã cho. Hãy xem một ví dụ.

Đầu vào

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

Đầu ra

6

Có tổng cộng 6 chuỗi con khác nhau trong chuỗi đã cho. Họ là tôi, mesome, mesomemecoffe, mesomemecoffee, mecoffe, mecoffee.

Hãy xem các bước để giải quyết vấn đề.

  • Khởi tạo các chuỗi.

  • Lặp lại str và tìm chỉ mục chuỗi con bắt đầu và kết thúc. Lưu trữ chúng trong các mảng riêng biệt.

  • Khởi tạo một tập hợp để lưu trữ các chuỗi con khác nhau.

  • Lặp lại chuỗi.

    • Kiểm tra xem chỉ mục hiện tại có khớp với chuỗi bắt đầu của mảng mà chúng tôi đã tạo trước đó hay không.

    • Nếu chúng tôi tìm thấy chỉ mục chuỗi bắt đầu, thì hãy tìm kiếm chuỗi kết thúc.

    • Thêm tất cả các chuỗi cho đến khi chúng tôi tìm thấy phần cuối của một biến.

    • Khi chúng tôi tìm thấy chuỗi kết thúc, hãy tăng số lượng chuỗi con và thêm chuỗi con vào tập hợp.

    • Đặt lại biến chuỗi con.

  • In số lượng chuỗi con.

Ví dụ

Hãy xem mã.

#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;
}

Đầu ra

Nếu bạn thực hiện chương trình trên, bạn sẽ nhận được kết quả sau.

6

Kết luận

Nếu bạn có bất kỳ câu hỏi nào trong hướng dẫn, hãy đề cập đến chúng trong phần bình luận.