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

พิมพ์อักขระทั่วไปของสองสตริงตามลำดับตัวอักษรใน C++


ในปัญหาการเขียนโปรแกรมนี้ เราจะได้รับสองสตริง และเราต้องหาอักขระทั้งหมดของสตริงที่เหมือนกันทั้งในสตริง และเราต้อง พิมพ์อักขระทั่วไปเหล่านี้ตามลำดับตัวอักษร . และพิมพ์ 'NO COMMON CHARACTERS ' หากไม่มีตัวอักษรทั่วไปเกิดขึ้น เนื่องจากสตริงไม่มีตัวอักษรตัวพิมพ์เล็กทั้งหมด

มาดูตัวอย่างกัน −

Input : string1 : adsfhslf
   string2 : fsrakf
Output : affs

คำอธิบาย - ระหว่างสองสายมี a, f, s ดังนั้นผลลัพธ์ของพจนานุกรมคือ 'afs'

Input : string1 : abcde
   string2 : glhyte
Output : No common characters

คำอธิบาย − ไม่มีอักขระที่เหมือนกัน

เพื่อแก้ปัญหานี้ เราจำเป็นต้องค้นหาอักขระทั่วไปในสตริง และผลลัพธ์จะเป็นลำดับพจนานุกรมของสตริงเหล่านี้

อัลกอริทึม

อัลกอริทึมในการแก้ปัญหานี้คือ −

Step 1 : Create two arrays a1[] and a2[] of size 26 each for counting the number of alphabets in the strings string1 and string2.
Step 2 : traverse a1[] and a2[]. and in sequence print all those numbers that have values in the array.

ตัวอย่าง

มาสร้างโปรแกรมตามอัลกอริธึมนี้เพื่อแสดงการทำงานกันเถอะ -

#include<bits/stdc++.h>
using namespace std;
int main(){
   string string1 = "adjfrdggs";
   string string2 = "gktressd";
   cout<<"The strings are "<<string1<<" and "<<string2;
   cout<<"\nThe common characters are : ";
   int a1[26] = {0};
   int a2[26] = {0};
   int i , j;
   char ch;
   char ch1 = 'a';
   int k = (int)ch1, m;
   for(i = 0 ; i < string1.length() ; i++){
      a1[(int)string1[i] - k]++;
   }
   for(i = 0 ; i < string2.length() ; i++){
      a2[(int)string2[i] - k]++;
   }
   for(i = 0 ; i < 26 ; i++){
      if (a1[i] != 0 and a2[i] != 0){
         for(j = 0 ; j < min(a1[i] , a2[i]) ; j++){
            m = k + i;
            ch = (char)(k + i);
            cout << ch;
         }
      }
   }
   return 0;
}

ผลลัพธ์

The strings are adjfrdggs and gktressd
The common characters are : dgrs