ในปัญหาการเขียนโปรแกรมนี้ เราจะได้รับสองสตริง และเราต้องหาอักขระทั้งหมดของสตริงที่เหมือนกันทั้งในสตริง และเราต้อง พิมพ์อักขระทั่วไปเหล่านี้ตามลำดับตัวอักษร . และพิมพ์ '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