290
Cerința
Scrieţi un program care citeşte din fişierul de intrare şiruri de caractere de forma tip#cuvânt, unde cuvânt este un şir oarecare de litere iar tip poate fi una din literele S, P sau C, semnificaţia fiind subiect, predicat sau complement. Programul va afişa, în ordine lexicografică (după subiect, predicat, complement), toate propoziţiile având structura subiect predicat complement ce pot fi formate cu ajutorul cuvintelor citite.
Date de intrare
Fișierul de intrare s_p_c_2.in conține pe prima linie mai multe şiruri de caractere de forma tip#cuvânt, separate printr-un spaţiu.
Date de ieșire
Fișierul de ieșire s_p_c_2.out va conține toate propoziţiile având structura descrisă mai sus, câte una pe linie.
Restricții și precizări
- sunt cel mult
100de subiecte,100de predicate şi100de complemente - fiecare cuvânt are cel mult
40de caractere, litere mari şi mici ale alfabetului englez - în fişier există cel puţin un subiect, cel puţin un predicat şi cel puţin un complement.
Exemplu:
s_p_c_2.in
S#Ion S#Vasile P#alearga C#repede P#scrie C#incet
s_p_c_2.out
Ion alearga incet Ion alearga repede Ion scrie incet Ion scrie repede Vasile alearga incet Vasile alearga repede Vasile scrie incet Vasile scrie repede
#include <bits/stdc++.h>
using namespace std;
ifstream cin("s_p_c_2.in");
ofstream cout("s_p_c_2.out");
char S[100][100] , P[100][100] , C[100][100];
int main()
{
char s[100];
int i = 0;
int cnt1=0 , cnt2=0 , cnt3=0;
while(cin >> s)
{
if(s[0]=='S')
{
int j = 2;
while(s[j]!=' ')
{
S[cnt1][j-2]=s[j];
j++;
}
cnt1++;
}
else if(s[0]=='P')
{
int j = 2;
while(s[j]!=' ')
{
P[cnt2][j-2]=s[j];
j++;
}
cnt2++;
}
else if(s[0]=='C')
{
int j = 2;
while(s[j]!=' ')
{
C[cnt3][j-2]=s[j];
j++;
}
cnt3++;
}
}
for(int i = 0 ; i < cnt1 ; ++i)
for(int j = i + 1 ; j < cnt1 ; ++j)
if(strcmp(S[i],S[j]) > 0)
swap(S[i] , S[j]);
for(int i = 0 ; i < cnt2 ; ++i)
for(int j = i + 1 ; j < cnt2 ; ++j)
if(strcmp(P[i],P[j]) > 0)
swap(P[i] , P[j]);
for(int i = 0 ; i < cnt3 ; ++i)
for(int j = i + 1 ; j < cnt3 ; ++j)
if(strcmp(C[i],C[j]) > 0)
swap(C[i] , C[j]);
for(int i = 0 ; i < cnt1 ; ++i)
for(int j = 0 ; j < cnt2 ; ++j)
for(int q = 0 ; q < cnt3 ; ++q)
cout << S[i] << ' ' << P[j] << ' ' << C[q] << endl;
return 0;
}
Comentarii