Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

सी++ में खोज सुझाव प्रणाली

मान लीजिए कि हमारे पास स्ट्रिंग उत्पादों की एक सरणी है और एक स्ट्रिंग है जिसे searchWord कहा जाता है। हम एक ऐसा मॉड्यूल डिज़ाइन करना चाहते हैं जो searchWord के प्रत्येक वर्ण के टाइप होने के बाद उत्पाद सूची से अधिकतम तीन उत्पाद नामों का सुझाव दे। सुझाए गए उत्पादों में searchWord के साथ सामान्य उपसर्ग होना चाहिए। जब एक सामान्य उपसर्ग के साथ तीन से अधिक उत्पाद हों तो तीन लेक्सिकोग्राफ़िक रूप से न्यूनतम उत्पाद लौटाएं। इसलिए searchWord के प्रत्येक अक्षर को टाइप करने के बाद हमें सुझाए गए उत्पादों की सूची ढूंढनी होगी।

यदि इनपुट इस प्रकार है:[ "मोबाइल", "माउस", "मनीपॉट", "मॉनिटर", "माउसपैड"], और खोज शब्द "माउस" है, तो आउटपुट [["मोबाइल", "मनीपॉट", "मॉनिटर"], ["मोबाइल", "मनीपॉट", "मॉनिटर"], ["माउस", "माउसपैड"], ["माउस", "माउसपैड"], ["माउस", "माउसपैड"]]

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • स्ट्रिंग प्रकार कुंजी और स्ट्रिंग मानों की सूची के मानचित्र m को परिभाषित करें

  • उत्पाद सरणी को क्रमबद्ध करें p

  • मैं के लिए 0 से लेकर p-1 के आकार तक

    • x :=खाली स्ट्रिंग

    • j के लिए 0 से लेकर p की लंबाई तक[i] - 1

      • x :=x + p[i, j]

      • यदि m[x] <3 की लंबाई है, तो p[i] को m[x] सूची में डालें

  • स्ट्रिंग्स रेस का मैट्रिक्स बनाएं, अस्थायी सेट करें:=खाली स्ट्रिंग

  • मैं के लिए 0 से लेकर s - 1 के आकार तक के लिए

    • अस्थायी:=अस्थायी + एस [i]

    • m[temp] को रेस में डालें

  • रिटर्न रेस

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<vector<auto> > v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << "[";
      for(int j = 0; j <v[i].size(); j++){
         cout << v[i][j] << ", ";
      }
   cout << "],";
   }
   cout << "]"<<endl;
}
class Solution {
   public:
   vector<vector<string>> suggestedProducts(vector<string>& p,
   string s) {
      map <string, vector < string > > m;;
      sort(p.begin(), p.end());
      for(int i = 0; i < p.size(); i++){
         string x = "";
         for(int j = 0; j < p[i].size(); j++){
            x += p[i][j];
            if(m[x].size()<3)m[x].push_back(p[i]);
         }
      }
      vector < vector <string> > res;
      string temp = "";
      for(int i = 0; i < s.size(); i++){
         temp += s[i];
         res.push_back(m[temp]);
      }
      return res;
   }
};
main(){
   vector<string> v =
   {"mobile","mouse","moneypot","monitor","mousepad"};
   Solution ob;
   print_vector(ob.suggestedProducts(v, "mouse"));
}

इनपुट

["mobile","mouse","moneypot","monitor","mousepad"]
"mouse"

आउटपुट

[[mobile, moneypot, monitor, ],[mobile, moneypot, monitor, ],[mouse,
mousepad, ],[mouse, mousepad, ],[mouse, mousepad, ],]

  1. बाइनरी सी ++ में एक स्ट्रिंग खोजें

    बाइनरी सर्च ए स्ट्रिंग में, हमें स्ट्रिंग्स की एक क्रमबद्ध सरणी दी जाती है और हमें बाइनरी सर्च एल्गोरिथम का उपयोग करके स्ट्रिंग्स की सरणी में एक स्ट्रिंग की खोज करनी होती है। उदाहरण Input : stringArray = {“I”, “Love”, “Programming”, “tutorials”, &ldquo

  1. सी ++ में एक स्ट्रिंग को टोकन करना

    इस खंड में, हम देखेंगे कि C++ में स्ट्रिंग्स को कैसे टोकननाइज़ किया जाता है। सी में हम वर्ण सरणी के लिए strtok() फ़ंक्शन का उपयोग कर सकते हैं। यहां हमारे पास एक स्ट्रिंग क्लास है। अब हम देखेंगे कि उस स्ट्रिंग से कुछ सीमांकक का उपयोग करके स्ट्रिंग को कैसे काटा जाता है। C++ फीचर का उपयोग करने के लिए,

  1. सी ++ में एक स्ट्रिंग को टोकननाइज़ करें?

    पहला तरीका है, रिक्त स्थान से अलग किए गए शब्दों को पढ़ने के लिए एक स्ट्रिंगस्ट्रीम का उपयोग करना। यह थोड़ा सीमित है लेकिन यदि आप उचित जांच प्रदान करते हैं तो यह कार्य काफी अच्छी तरह से करता है। उदाहरण #include <vector> #include <string> #include <sstream> using namespace std; in