Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

สลับการเรียงลำดับสตริงบนล่างใน 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