ਸਤਰ ਖੋਜ ਐਲਗੋਰਿਦਮ ਦੀ ਵਰਤੋਂ ਇੱਕ ਵੱਡੇ ਟੈਕਸਟ(ਸਟਰਿੰਗ) ਦੇ ਅੰਦਰ ਇੱਕ ਖਾਸ ਪੈਟਰਨ(ਸਬਸਟ੍ਰਿੰਗ) ਦੀਆਂ ਘਟਨਾਵਾਂ ਨੂੰ ਲੱਭਣ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ ਐਲਗੋਰਿਦਮ ਟੈਕਸਟ ਪ੍ਰੋਸੈਸਿੰਗ, ਖੋਜ ਅਤੇ ਹੇਰਾਫੇਰੀ ਦੇ ਕੰਮਾਂ ਵਿੱਚ ਇੱਕ ਮਹੱਤਵਪੂਰਣ ਭੂਮਿਕਾ ਅਦਾ ਕਰਦਾ ਹੈ।
ਕਿਦਾ ਚਲਦਾ
- ਖੋਜ ਕਰਨ ਲਈ ਇੱਕ ਟੈਕਸਟ(ਸਟ੍ਰਿੰਗ) ਅਤੇ ਇੱਕ ਪੈਟਰਨ(ਸਬਸਟ੍ਰਿੰਗ) ਨਾਲ ਸ਼ੁਰੂ ਕਰੋ।
- ਇੱਕ ਸਮੇਂ ਵਿੱਚ ਇੱਕ ਅੱਖਰ ਟੈਕਸਟ ਦੁਆਰਾ ਦੁਹਰਾਓ।
- ਟੈਕਸਟ ਵਿੱਚ ਹਰੇਕ ਅੱਖਰ ਲਈ, ਪੈਟਰਨ ਦੇ ਪਹਿਲੇ ਅੱਖਰ ਨਾਲ ਇਸਦੀ ਤੁਲਨਾ ਕਰੋ।
- ਜੇਕਰ ਕੋਈ ਮੇਲ ਹੈ, ਤਾਂ ਜਾਂਚ ਕਰੋ ਕਿ ਕੀ ਅਗਲੇ ਅੱਖਰ ਵੀ ਪੈਟਰਨ ਨਾਲ ਮੇਲ ਖਾਂਦੇ ਹਨ।
- ਜੇਕਰ ਪੈਟਰਨ ਪੂਰੀ ਤਰ੍ਹਾਂ ਮੇਲ ਖਾਂਦਾ ਹੈ, ਤਾਂ ਮੈਚ ਦੀ ਸ਼ੁਰੂਆਤੀ ਸਥਿਤੀ ਨੂੰ ਰਿਕਾਰਡ ਕਰੋ।
- ਟੈਕਸਟ ਵਿੱਚ ਪੈਟਰਨ ਦੀ ਖੋਜ ਕਰਨਾ ਜਾਰੀ ਰੱਖੋ।
ਉਦਾਹਰਨ
ਇੱਕ ਟੈਕਸਟ 'ਤੇ ਵਿਚਾਰ ਕਰੋ: "ababcababcabcabc" ਅਤੇ ਇੱਕ ਪੈਟਰਨ: "abc"
- ਸਥਿਤੀ 0 ਤੋਂ ਸ਼ੁਰੂ ਕਰੋ। ਪੈਟਰਨ ਵਿੱਚ ਪਹਿਲੇ ਅੱਖਰ "a" ਨਾਲ "a" ਦੀ ਤੁਲਨਾ ਕਰੋ।
- ਮਿਲਾਨ ਮਿਲਿਆ, ਅਗਲੇ ਅੱਖਰਾਂ 'ਤੇ ਜਾਓ: "b" ਦੇ ਨਾਲ "b", ਅਤੇ "c" ਨਾਲ "a"।
- ਮੇਲਣਾ ਜਾਰੀ ਰੱਖੋ: "a" ਨਾਲ "b", "b" ਨਾਲ "a" ਅਤੇ "c" ਨਾਲ "b"।
- ਸਥਿਤੀ 2 'ਤੇ ਮੈਚ ਅਸਫਲ ਰਿਹਾ।
- ਸਥਿਤੀ 3 ਤੋਂ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰੋ। ਪੈਟਰਨ ਵਿੱਚ ਪਹਿਲੇ ਅੱਖਰ "a" ਨਾਲ "a" ਦੀ ਤੁਲਨਾ ਕਰੋ।
- ਸਫਲ ਮੇਲ: "a" ਨਾਲ "a", "b" ਨਾਲ "b", ਅਤੇ "c" ਨਾਲ "c"।
- ਰਿਕਾਰਡ ਸਥਿਤੀ 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
ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ "ababcababcabcabc" ਟੈਕਸਟ ਦੇ ਅੰਦਰ ਪੈਟਰਨ "abc" ਦੀਆਂ ਘਟਨਾਵਾਂ ਨੂੰ ਲੱਭਣ ਲਈ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਨਤੀਜਾ ਇੱਕ ਵੈਕਟਰ ਹੋਵੇਗਾ ਜਿਸ ਵਿੱਚ ਮੈਚਾਂ ਦੀਆਂ ਸ਼ੁਰੂਆਤੀ ਸਥਿਤੀਆਂ ਸ਼ਾਮਲ ਹਨ।