কম্পিউটার

C++ এ স্ট্রিং এনকোড এবং ডিকোড করুন


ধরুন আমাদের স্ট্রিং এর একটি তালিকা আছে। আমাদের একটি অ্যালগরিদম ডিজাইন করতে হবে যা একটি স্ট্রিং-এ স্ট্রিংয়ের তালিকা এনকোড করতে পারে। আমাদের একটি ডিকোডার তৈরি করতে হবে যা স্ট্রিংগুলির মূল তালিকায় ফিরে আসবে। ধরুন আমাদের এই মেশিনগুলিতে এনকোডার এবং ডিকোডার ইনস্টল করা আছে, এবং নিম্নরূপ দুটি ভিন্ন ফাংশন রয়েছে -

মেশিন 1 (প্রেরক) এর ফাংশন আছে

string encode(vector<string< strs) {
   //code to read strings and return encoded_string;
}

মেশিন 2 (রিসিভার) এর ফাংশন আছে

vector<string< decode(string s) {
   //code to decode encoded_string and returns strs;
}

সুতরাং, যদি ইনপুট {"hello", "world", "coding", "challenge"} এর মত হয়, তাহলে আউটপুটটি হবে Encoded String 5#hello5#world6#coding9#challenge, decoded form [hello, world, coding , চ্যালেঞ্জ, ]

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন এনকোড সংজ্ঞায়িত করুন(), এটি একটি অ্যারে স্ট্রার্স গ্রহণ করবে,

  • ret :=খালি স্ট্রিং

  • আরম্ভ করার জন্য i :=0, যখন i

    • ret :=ret concatenate strs[i>

      এর আকার
  • রিটার্ন রিটার্ন

  • একটি ফাংশন সংজ্ঞায়িত করুন getNext(), এটি x, start, s,

    লাগবে
  • idx :=s এর আকার

  • আরম্ভ করার জন্য i :=শুরু করুন, যখন i

    • যদি s[i] x এর মত হয়, তাহলে −

      • idx :=i

      • লুপ থেকে বেরিয়ে আসুন

  • রিটার্ন আইডিএক্স

  • পদ্ধতির ডিকোড সংজ্ঞায়িত করুন এতে s

    লাগবে
  • একটি অ্যারে ret সংজ্ঞায়িত করুন

  • i :=0

  • n :=s

    এর আকার
  • যখন i

    • hashPos :=getNext('#', i, s)

    • len :=(ইনডেক্স থেকে s এর সাবস্ট্রিং (i থেকে hashPos - i - 1) পূর্ণসংখ্যা হিসাবে

    • i :=হ্যাশপস + 1

    • ret এর শেষে সূচী থেকে s এর সাবস্ট্রিং (i থেকে লেন - 1) সন্নিবেশ করুন

    • i :=i + len

  • রিটার্ন রিটার্ন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<auto< v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Codec {
public:
   string encode(vector<string>& strs) {
      string ret = "";
      for (int i = 0; i < strs.size(); i++) {
         ret += to_string(strs[i].size()) + "#" + strs[i];
      }
      return ret;
   }
   int getNext(char x, int start, string s){
      int idx = s.size();
      for (int i = start; i < s.size(); i++) {
         if (s[i] == x) {
            idx = i;
            break;
         }
      }
      return idx;
   }
   vector<string> decode(string s) {
      vector<string> ret;
      int i = 0;
      int n = s.size();
      while (i < n) {
         int hashPos = getNext('#', i, s);
         int len = stoi(s.substr(i, hashPos - i));
         i = hashPos + 1;
         ret.push_back(s.substr(i, len));
         i += len;
      }
      return ret;
   }
};
main(){
   Codec ob;
   vector<string> v = {"hello", "world", "coding", "challenge"};
   string enc = (ob.encode(v));
   cout << "Encoded String " << enc << endl;
   print_vector(ob.decode(enc));
}

ইনপুট

{"hello", "world", "coding", "challenge"}

আউটপুট

Encoded String 5#hello5#world6#coding9#challenge
[hello, world, coding, challenge, ]

  1. C++ এ লেক্সিকোগ্রাফিক ক্রমে 'A' এবং 'B' স্ট্রিং হিসাবে একটি সংখ্যা প্রিন্ট করুন

  2. C++ এ সংযুক্ত স্ট্রিংগুলিকে বিভক্ত করুন

  3. দুটি স্ট্রিংকে গুণ করার প্রোগ্রাম এবং C++ এ স্ট্রিং হিসাবে ফলাফল ফেরত দেয়

  4. C++ এ দুটি বাইনারি স্ট্রিং যোগ করার জন্য প্রোগ্রাম