কম্পিউটার

C++ এ বিকল্প লোয়ার আপার স্ট্রিং সাজান


একটি স্ট্রিং হল অক্ষরের একটি বিন্যাস . এবং এই সমস্যাটি হল স্ট্রিংয়ের উপাদানগুলিকে বিকল্প বড় এবং ছোট হাত দিয়ে সাজানো৷

সমস্যা বর্ণনা − বিকল্প লোয়ার আপার স্ট্রিং বাছাই, এমন একটি সমস্যা যেখানে আমাদেরকে একটি অপরিবর্তিত স্ট্রিং প্রদান করা হয় যাতে মিশ্র বড় এবং ছোট হাতের অক্ষর থাকে এবং আমাদের এই স্ট্রিংটি এমনভাবে সাজাতে হবে যাতে বড় এবং ছোট হাতের অক্ষরগুলি বিকল্প অবস্থানে রাখা হয় কিন্তু সেখানে থাকে একটি সাজানো পদ্ধতি।

বিষয়টি আরও ভালোভাবে বোঝার জন্য একটি উদাহরণ নেওয়া যাক,

Input : aFegrAfStRzsV
Output : AaFeRfSgVrstz
Explanation :
Upper case characters : A F R S V
Lower case characters : a e f g r s t z

উভয়ই একটি সাজানো পদ্ধতিতে তাই আমরা এখন তাদের বিকল্প ক্রমে রাখতে পারি৷

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

অ্যালগরিদম

Step 1 : In an array lowercount[] add all lowercase characters in sorted order.
Step 2 : In an array uppercount[] add all uppercase characters in sorted order.
Step 3 : Create the final string using alternate values from both arrays.
Step 4 : Print the result array.

উদাহরণ

#include <iostream>
using namespace std;
#define MAX 26
void alternateULSort(string& s) ;
int main(){
   string str = "aFegrAfStRzsV";
   cout<<"The unsorted string is : "<<str;
   cout<<"\nThe alternate lower upper sorted string is ";
   alternateULSort(str);
   cout << str << "\n";
}
void alternateULSort(string& s){
   int n = s.length();
   int lowerCount[MAX] = { 0 }, upperCount[MAX] = { 0 };
   for (int i = 0; i < n; i++) {
      if (isupper(s[i]))
         upperCount[s[i] - 'A']++;
      else
         lowerCount[s[i] - 'a']++;
   }
   int i = 0, j = 0, k = 0;
   while (k < n) {
      while (i < MAX && upperCount[i] == 0)
         i++;
      if (i < MAX) {
         s[k++] = 'A' + i;
         upperCount[i]--;
         }
      while (j < MAX && lowerCount[j] == 0)
         j++;
      if (j < MAX) {
         s[k++] = 'a' + j;
         lowerCount[j]--;
      }
   }
}

আউটপুট

The unsorted string is : aFegrAfStRzsV
The alternate lower upper sorted string is AaFeRfSgVrstz

  1. C++ এ লোয়ার দিয়ে উপরের তির্যক অদলবদল করুন

  2. কিভাবে std::string কে C++ এ লোয়ার কেসে রূপান্তর করবেন?

  3. একটি C++ স্ট্রিংকে আপার কেসে রূপান্তর করুন

  4. C++ এ একটি স্ট্রিংকে টোকেনাইজ করবেন?