কম্পিউটার টিউটোরিয়াল

C++-এ কম্বিনেশন জন্য ইটারেটর


মনে করুন আমাদের একটি Iterator ক্লাস ডিজাইন করতে হবে, যাতে নিচের অপারেশনগুলো থাকে -

  • একটি কনস্ট্রাক্টর সংজ্ঞায়িত করুন যা একটি স্ট্রিং `characters` (সর্টেড ডISTINCT लोওয়ারকেস ইংরেজি অক্ষর) এবং একটি সংখ্যা `combinationLength` প্যারামিটার হিসেবে নেবে।
  • একটি `next()` ফাংশন সংজ্ঞায়িত করুন যা alfabhetic অর্ডারে `combinationLength` দৈর্ঘ্যের পরবর্তী কম্বিনেশন রিটার্ন করবে।
  • একটি `hasNext()` ফাংশন সংজ্ঞায়িত করুন যা `true` রিটার্ন করবে যদি এবং কেবল যদি পরবর্তী কম্বিনেশন থাকে।

যদি ইনপুট নিচের মোতাবিক হয় -

CombinationIterator iterator = new CombinationIterator("xyz", 2); iterator.next(); // returns "xy" iterator.hasNext(); // returns true iterator.next(); // returns "xz" iterator.hasNext(); // returns true iterator.next(); // returns "yz" iterator.hasNext(); // returns false

এটি সমাধান করতে আমরা নিচের ধাপগুলো অনুসরণ করব -

  • `combs` নামক একটি স্ট্রিং অ্যারে, এবং `idx` ইনডেক্স তৈরি করুন
  • `makeCombs()` নামক একটি মেথড সংজ্ঞায়িত করুন, এটি `s` স্ট্রিং, ইন্টিজার `l`, একটি টেম্পোরারি স্ট্রিং (প্রাথমিকভাবে খালি), এবং `start` (প্রাথমিকভাবে 0) নেবে। এটি নিচের মোতাবিক কাজ করবে -
  • যদি `temp`-এর আকার `l` হয়, তবে `temp`-কে `combs`-এ ইনসার্ট করুন এবং রিটার্ন করুন
  • `i` = `start` থেকে `s`-এর আকার পর্যন্ত
    • `makeCombs(s, l, temp + s[i], i + 1)`
  • `printVector()` মেথড স্ট্রিং অ্যারে ইনপুট নেবে, সেটি প্রদর্শন করবে
  • কনস্ট্রাক্টর নিচের মোতাবিক সংজ্ঞায়িত করুন: এটি স্ট্রিং `c` এবং `cl` নেবে,
  • `makeCombs(c, cl)` কল করুন, `idx := 0` সেট করুন
  • `next()` মেথড `idx` বাড়াবে এবং `combs[idx - 1]` রিটার্ন করবে
  • `hasNext()` মেথড `true` রিটার্ন করবে যদি `idx` `combs`-এর আকারের সমান না হয়, অন্যথায় `false`।

উদাহরণ (C++)

বेहतर বোঝার জন্য নিচের ইমপ্লিমেন্টেশনটি দেখুন -

#include <bits/stdc++.h> using namespace std; class CombinationIterator { public:    vector <string> combs;    int idx;    void makeCombs(string s, int l, string temp ="", int start = 0){       if(temp.size() == l){          combs.push_back(temp);          return;       }       for(int i = start; i < s.size(); i++){          makeCombs(s, l, temp + s[i], i + 1);       }    }    void printVector(vector <string> v){       for(int i = 0; i < v.size(); i++){          cout << v[i] << "\n";       }       cout << endl;    }    CombinationIterator(string c, int cl) {       makeCombs(c, cl);       idx = 0;    }    string next() {       idx++;       return combs[idx - 1];    }    bool hasNext() {       return !(idx == combs.size());    } }; main(){    CombinationIterator ob("xyz", 2);    cout << (ob.next()) << endl;    cout << (ob.hasNext()) << endl;    cout << (ob.next()) << endl;    cout << (ob.hasNext()) << endl;    cout << (ob.next()) << endl;    cout << (ob.hasNext()) << endl; }

ইনপুট

Initialize with “xyz” and 2, then call next() and hasNext() multiple times

আউটপুট

xy 1 xz 1 yz 0

  1. C++-এ বাইনারি সার্চ ট্রি ইটারেটর (Binary Search Tree Iterator)

  2. C++ প্রোগ্রাম: স্ট্রিং ম্যাচিংয়ের জন্য বিট্যাপ (Bitap) অ্যালগরিদম ইমপ্লিমেন্টেশন

  3. C++-এ স্ট্রিং টোকেনাইজেশন: স্ট্রিম এবং getline() ব্যবহার

  4. C++-এ স্ট্রিং টোকেনাইজ (Tokenize) করা