سوال میخواد که دو تا جمله از ورودی بگیره که به نقطه ختم میشن، کلماتی که توی هر دو جمله هستن رو چاپ کنه، در انتها هم کلمات دو جمله رو ادغام کنه بطوری که هیچ کلمه تکراری توش نباشه و کلمات به ترتیب صعودی باشن، مثلا اول کلمه ای که اولش a داره بیاد و بعدش کلمه ای که اولش b داره.
این هم کدم:
#include <iostream>
using namespace std;
void get(char a[]);
void repeat(char a[],char b[]);
int count(char a[],int i);
void arrange(char a[]);
void add(char a[],int b);
int len(char a[]);
void sort(char a[],int m,int n,int i,int j);
//void merge(char a[],char b[],char c[]);
int main()
{
char a[30]={'\0'};
char b[30]={'\0'};
char c[40]={'\0'};
get(a);
get(b);
repeat(a,b);
arrange(a);
arrange(b);
/* merge(a,b,c);
for(int i=0;c[i]!='.';i++)
cout<<c[i];*/
return 0;
}
void get (char a[])
{
char c=cin.get();
for(int i=0;c!='\n';i++)
{
a[i]=c;
c=cin.get();
}
}
void repeat(char a[],char b[])
{
int k;
for(int i=0,j=0;a[i]!='.'&&b[j]!='.';i++,j++)
{
int m;
int n;
int q;
m=count(a,i);
n=count(b,j);
for(q=i,n=0;b[q]!=' '&&b[q]!='.';q++,n++);
if(m==n)
{
int s=i;
int r=j;
int flag=0;
for(int p=0;p<m&&flag==0;p++,r++,s++)
{
if(a[s]!=b[r])
{
flag=1;
}
}
if(flag==1)
{
int k;
for(k=i;a[k]!='.'&&a[k]!=' ';k++);
i=k;
for(k=j;b[k]!='.'&&b[k]!=' ';k++);
j=k;
}
if(flag==0)
{
int k;
for(k=i;a[k]!=' '&&a[k]!='.';k++)
{
cout<<a[k];
a[k]='\0';
}
cout<<endl;
for(k=i;a[k]!='.'&&a[k]!=' ';k++);
i=k;
for(k=j;b[k]!='.'&&b[k]!=' ';k++);
j=k;
}
}
}
}
int count(char a[],int i)
{
int m,k;
for(k=i,m=0;a[k]!=' '&&a[k]!='.'&&a[k]!='\0';k++,m++);
return m;
}
void arrange(char a[])
{
for(int i=0;a[i]!='.';i++)
{
int m=count(a,i);
if(a[i+m]!='.')
{
int i,j;
for(j=i+m;a[j]==' '||a[j]=='\0';j++);
int y=j;
int x=i;
int n=count(a,y);
if(a[x]>a[y])
{
if(m==n)
{
for(int u=x,v=y;a[v]!=' '&&a[v]!='.'&&a[v]!='\0';u++,v++)
{
int temp=a[v];
a[v]=a[y];
a[y]=temp;
}
}
else if(m>n)
{
sort(a,n,m,y,x);
}
else if(m<n)
{
sort(a,m,n,x,y);
}
}
if(a[x]==a[y])
{
int flag=0;
int xx=x;
int yy=y;
for(;((a[xx]!='.'&&a[xx]!=' '&&a[xx]!='\0')||(a[yy]!='.'&&a[yy]!=' '&&a[yy]!='\0'))&&flag==0;yy++,xx++)
{
if(a[yy]!=a[xx])
{
if(a[yy]<a[xx])
flag=2;
if(a[yy]>a[xx])
flag=1;
}
}
if(flag==2)
{
if(m==n)
{
for(int u=x,v=y;a[v]!=' '&&a[v]!='.'&&a[v]!='\0';u++,v++)
{
int temp=a[v];
a[v]=a[y];
a[y]=temp;
}
}
else if(m>n)
{
sort(a,n,m,y,x);
}
else if(m<n)
{
sort(a,m,n,x,y);
}
}
else if(flag==0)
{
if(m==n)
{
for(int b=x;a[b]!='.'&&a[b]!=' '&&a[b]!='\0';b++)
a[b]='\0';
}
else if(m>n)
{
sort(a,n,m,y,x);
}
else if(m<n)
{
sort(a,m,n,x,y);
}
}
}
}
int s;
for(s=i+m;a[s]==' '||a[s]=='\0';s++);
i=s-1;
}
}
void add(char a[],int b)
{
int m=len(a);
int i;
for(i=m;i>b-1;i--)
{
a[i]=a[i-1];
}
a[i]={'\0'};
}
int len(char a[])
{
int i;
for(i=0;a[i]!='.';i++);
return i;
}
void sort(char a[],int m,int n,int i,int j)
{
//m=max
//n=min
int p=m;
int q=n;
for(;a[p]!=' '&&a[p]!='.'&&a[p]!='\0';p++,q++)
{
int temp=a[p];
a[p]=a[q];
a[q]=temp;
}
q--;
if(a[p]!='.' )
{
for(;a[q]!=' '&&a[q]!='.'&&a[q]!='\0';q++,p++)
{
int h=p+1;
add(a,h);
a[p]=a[q+1];
a[q+1]='\0';
}
a[p]=' ';
}
else
{
for(;a[q]!=' '&&a[q]!='.'&&a[q]!='\0';q++,p++)
{
int h=p+1;
add(a,h);
a[p]=a[q];
a[q+1]='\0';
}
a[p]='.';
}
}/*
void merge(char a[],char b[],char c[])
{
int k=0,m,n;
for(int i=0,j=0,k;a[i]!='.'&&b[j]!='.';i++,j++,k++)
{
if(a[i]>b[j])
{
for(int m=j;b[m]!='.'&&b[m]!=' '&&b[m]!='\0';m++)
{
c[k]=b[m];
k++;
}
for(int n=m;b[n]=='.'||b[n]==' '||b[n]=='\0';n++);
j=n-1;
}
else if(a[i]<b[j])
{
for(int m=i;a[m]!='.'&&a[m]!=' '&&a[m]!='\0';m++)
{
c[k]=a[m];
k++;
}
for(int n=m;a[n]=='.'||a[n]==' '||a[n]=='\0';n++);
i=n-1;
}
else if(a[i]==b[j])
{
int ii=i;
int jj=j;
int flag=0;
for(int f=ii,g=jj;(a[f]!='.'&&a[f]!=' '&&a[f]!='\0')&&(b[g]!='.'&&b[g]!=' '&&b[g]!='\0')&flag==0;f++,g++)
{
if(a[f]>a[g])
flag=1;
else if(a[f]<a[g])
flag=2;
}
if(flag==2)
{
int m,n;
for(m=i;a[m]!='.'&&a[m]!=' '&&a[m]!='\0';m++)
{
c[k]=a[m];
k++;
}
for(n=m;a[n]=='.'||a[n]==' '||a[n]=='\0';n++);
i=n-1;
}
else if(flag==1) //a[f]>b[g]
{
for(m=j;b[m]!='.' && b[m]!=' ' && b[m]!='\0';m++)
{
c[k]=b[m];
k++;
}
for(n=m;b[n]=='.'||b[n]==' '||b[n]=='\0';n++);
j=n-1;
}
c[k]=' ';
}
}
c[k]='.';
}
*/