Tìm tập ký tự và số lần xuất hiện mỗi ký tự trong cả S1, S2 (Không kể ký tự trống).
Tìm tập ký tự và số lần xuất hiện mỗi ký tự thuộc cả S1 và S2 (Không kể ký tự trống).
Tìm tập ký tự và số lần xuất hiện mỗi ký tự thuộc S1 nhưng không thuộc S2 (Không kể ký tự trống).

Tìm tập từ và số lần xuất hiện mỗi từ trong S1 hoặc S2.
Tìm tập từ và số lần xuất hiện mỗi từ trong S1 và S2.
Tìm tập từ và số lần xuất hiện mỗi từ trong S1 nhưng không xuất hiện trong S2.
đề bài đây. giúp với (( e tuyệt vọng lắm rồi . e không biết sai chỗ nào (
#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;
typedef struct{
char kytu;
int solan;
}tapkytu;
typedef struct{
string tu;
int solan;
}taptu;
void tim_kt_1(string s,tapkytu *x,int &n){
x[0].kytu=s[0];
x[0].solan=1;
n=1;
for(int i=1;i<s.length();i++){
int kt=0;
if(s[i]==' ') i++;
for(int j=0;j<n;j++)
if(x[j].kytu==s[i]) {
x[j].solan++;
kt=1;
}
if(!kt){
x[n].kytu=s[i];
x[n].solan=1;
n++;
}
}
}
void xuat1(tapkytu x[],int n){
for(int i=0;i<n;i++)
cout<<x[i].kytu<<" "<<x[i].solan<<endl;
delete(x);
}
void xuat2(taptu x[],int n){
for(int i=0;i<n;i++)
cout<<x[i].tu<<" "<<x[i].solan<<endl;
delete(x);
}
void tim_kt_2(string s1,string s2){
tapkytu *a,*b;
int n,m;
a,b= new tapkytu[1];
tim_kt_1(s1,a,n);
tim_kt_1(s2,b,m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(a[i].kytu==b[j].kytu)
cout<<a[i].kytu<<" "<<a[i].solan<<" "<<b[j].solan<<endl;
}
void tim_kt_3(string s1,string s2){
tapkytu *c,*d;
int n=1,m=1;
c,d= new tapkytu[n];
tim_kt_1(s1,c,n);
tim_kt_1(s2,d,m);
for(int i=0;i<n;i++){
int ktr=1;
for(int j=0;j<m;j++)
if(c[i].kytu==d[j].kytu) ktr=0;
if(ktr==1) cout<<c[i].kytu<<" "<<c[i].solan<<endl;
}
}
void tim_tu_1(string s,taptu *x,int &n){
int i=0;
n=0;
while(i<s.length()){
x[0].tu='\0';
x[0].solan=0;
string tu;
while(s[i]==' ') i++;
while(s[i]!=' '&&s[i]!='\0'){
tu+=s[i];
i++;
}
int kt=1;
for(int j=0;j<n;j++)
if(tu==x[j].tu){
x[j].solan++;
kt=0;
}
if(kt){
x[n].tu=tu;
x[n].solan=1;
n++;
}
i++;
}
}
void tim_tu_2(string s1,string s2){
taptu *x,*y;
x,y=new taptu[1];
int n=0,m=0;
tim_tu_1(s1,x,n);
tim_tu_1(s2,y,m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(x[i].tu==y[j].tu)
cout<<x[i].tu<<" "<<x[i].solan<<" "<<y[j].solan<<endl;
}
void tim_tu_3(string s1,string s2){
taptu *x,*y;
delete(x);
delete(y);
x,y=new taptu[1];
int n,m;
tim_tu_1(s1,x,n);
tim_tu_1(s1,x,n);
for(int i=0;i<n;i++){
int kt=1;
for(int j=0;j<m;j++)
if(x[i].tu==y[i].tu) kt=0;
if(kt) cout<<x[i].tu<<" "<<x[i].solan<<endl;
}
}
void input(string &s1,string &s2){
cin.ignore();
cout<<"1: ";
getline(cin,s1);
cout<<"2: ";
getline(cin,s2);

}
int main(void){
int lenh;
do{
string s1,s2,s;
cout<<"0.Thoat"<<endl;
cout<<"1.Tim tap ki tu va so lan xuat hien cua ky tu trong ca S1,S2"<<endl;
cout<<"2.Tim tap ki tu va so lan xuat hien cua ky tu trong S1 va S2"<<endl;
cout<<"3.Tim tap ki tu va so lan xuat hien cua ky tu trong S1 nhung khong thuoc S2"<<endl;
cout<<"4.Tim tap tu va so lan xuat hien cua ky tu trong ca S1,S2"<<endl;
cout<<"5.Tim tap tu va so lan xuat hien cua ky tu trong S1 va S2"<<endl;
cout<<"6.Tim tap tu va so lan xuat hien cua ky tu trong S1 nhung khong thuoc S2"<<endl;
cout<<"COMMAND : "; cin>>lenh;

switch(lenh){
case 0:
lenh=0;
break;
case 1:{
input(s1,s2);
s=s1+s2;
cout<<s<<endl;
tapkytu *x;
delete(x);
int n=1;
x=new tapkytu[n];
tim_kt_1(s,x,n);
xuat1(x,n);
cout<<endl;
system("pause");
system("cls");
break;
}
case 2:{
input(s1,s2);
tim_kt_2(s1,s2);
cout<<endl;
system("pause");
system("cls");
break;
}

case 3:{
input(s1,s2);
tim_kt_3(s1,s2);
cout<<endl;
system("pause");
system("cls");
break;
}
case 4:{
input(s1,s2);
s=s1+s2;
taptu *x;
int n;
x=new taptu[1];
tim_tu_1(s,x,n);
xuat2(x,n);
cout<<endl;
system("pause");
system("cls");
break;
}
case 5:{
input(s1,s2);
tim_tu_2(s1,s2);
cout<<endl;
system("pause");
system("cls");
break;
}
case 6:{
input(s1,s2);
tim_tu_3(s1,s2);
system("pause");
system("cls");
break;
}
default : {
cout<<"ERROR"<<endl;
system("pause");
system("cls");
break;
}
}
}while(lenh!=0);
}