სიმებიანი ძიების (String Search) ალგორითმი C++ -ში- ახსნა, მაგალითი და კოდი

სიმებიანი ძიების ალგორითმი გამოიყენება კონკრეტული ნიმუშის(ქვესტრიქონის) შემთხვევების მოსაძებნად უფრო დიდ ტექსტში(სტრიქონი). ეს ალგორითმი გადამწყვეტ როლს ასრულებს ტექსტის დამუშავების, ძიების და მანიპულირების ამოცანებისას.

Როგორ მუშაობს

  1. დაიწყეთ საძიებელი ტექსტით(სტრიქონი) და ნიმუშით(ქვესტრიქონი).
  2. გაიმეორეთ ტექსტში თითო სიმბოლო.
  3. ტექსტის თითოეული სიმბოლოსთვის შეადარეთ იგი ნიმუშის პირველ სიმბოლოს.
  4. თუ არსებობს შესატყვისი, შეამოწმეთ, შეესაბამება თუ არა შემდეგი სიმბოლოები ნიმუშს.
  5. თუ ნიმუში მთლიანად ემთხვევა, ჩაწერეთ მატჩის საწყისი პოზიცია.
  6. განაგრძეთ ნიმუშის ძებნა ტექსტში.

მაგალითი

განვიხილოთ ტექსტი: "ababcababcabcabc" და ნიმუში: "abc"

  1. დაიწყეთ 0 პოზიციიდან. შეადარეთ "a" ნიმუშის პირველ სიმბოლოს "a".
  2. ნაპოვნია შესატყვისი, გადადით შემდეგ სიმბოლოებზე: „b“ „b“-ით და „a“ „c“-ით.
  3. გააგრძელეთ შესატყვისი: „ბ“ „ა“, „ა“ „ბ“-ით და „ბ“ „გ“-ით.
  4. მატჩი ჩაიშალა მე-2 პოზიციაზე.
  5. თავიდან დაიწყეთ მე-3 პოზიციიდან. შეადარეთ "a" შაბლონის პირველ სიმბოლოს "a".
  6. წარმატებული მატჩი: „ა“ „ა“-სთან, „ბ“ „ბ“-სთან და „გ“ „გ“-ით.
  7. ჩაწერეთ პოზიცია 3.

ნიმუში "abc" გვხვდება 0, 6 და 9 პოზიციებზე.

კოდის მაგალითი C++-ში

#include <iostream>  
#include <string>  
#include <vector>  
  
std::vector<int> stringSearch(const std::string& text, const std::string& pattern) {  
    std::vector<int> positions;  
  
    for(int i = 0; i <= text.length()- pattern.length(); ++i) {  
        int j = 0;  
        while(j < pattern.length() && text[i + j] == pattern[j]) {  
            ++j;  
        }  
        if(j == pattern.length()) {  
            positions.push_back(i);  
        }  
    }  
  
    return positions;  
}  
  
int main() {  
    std::string text = "ababcababcabcabc";  
    std::string pattern = "abc";  
  
    std::vector<int> result = stringSearch(text, pattern);  
  
    std::cout << "Pattern found at positions: ";  
    for(int pos: result) {  
        std::cout << pos << ";  
    }  
    std::cout << std::endl;  
  
    return 0;  
}  

ამ მაგალითში, stringSearch ფუნქცია გამოიყენება "abc" ნიმუშის შემთხვევების საპოვნელად ტექსტში "ababcababcabcabc". შედეგი იქნება ვექტორი, რომელიც შეიცავს მატჩების სასტარტო პოზიციებს.