Cerința
Scrieţi un program care citeşte din fişierul de intrare şiruri de caractere de forma cuvânt#tip, 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.in conține pe prima linie mai multe şiruri de caractere de forma cuvânt#tip, separate printr-un spaţiu.
Date de ieșire
Fișierul de ieșire s_p_c.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 100 de subiecte, 100 de predicate şi 100 de complemente
fiecare cuvânt are cel mult 40 de 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.in
Ion#S Vasile#S alearga#P repede#C scrie#P incet#C
s_p_c.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
Răspunsuri la întrebare
Răspuns de
7
#include <bits/stdc++.h>
using namespace std;
int i, j, q, n, m, lu, k, k1, k2, k3;
char s[15000], c[50], *p, sep[]=" ";
string v1[105], v2[105], v3[105];
int main()
{
ifstream f("s_p_c.in");
ofstream g("s_p_c.out");
f.getline(s, sizeof(s));
p = strtok(s, sep);
while(p)
{
strcpy(c, p);
lu = strlen(c);
if(c[lu - 1] == 'S')
{
c[lu - 2] = NULL;
v1[++ k1] = c;
}
if(c[lu - 1] == 'P')
{
c[lu - 2] = NULL;
v2[++ k2] = c;
}
if(c[lu - 1] == 'C')
{
c[lu - 2] = NULL;
v3[++ k3] = c;
}
p = strtok(NULL, sep);
}
sort(v1 + 1, v1 + k1 + 1);
sort(v2 + 1, v2 + k2 + 1);
sort(v3 + 1, v3 + k3 + 1);
for(i = 1; i <= k1; i ++)
for(j = 1; j <= k2; j ++)
for(q = 1; q <= k3; q ++)
g << v1[i] << " " << v2[j] << " " << v3[q] << "\n";
return 0;
}
using namespace std;
int i, j, q, n, m, lu, k, k1, k2, k3;
char s[15000], c[50], *p, sep[]=" ";
string v1[105], v2[105], v3[105];
int main()
{
ifstream f("s_p_c.in");
ofstream g("s_p_c.out");
f.getline(s, sizeof(s));
p = strtok(s, sep);
while(p)
{
strcpy(c, p);
lu = strlen(c);
if(c[lu - 1] == 'S')
{
c[lu - 2] = NULL;
v1[++ k1] = c;
}
if(c[lu - 1] == 'P')
{
c[lu - 2] = NULL;
v2[++ k2] = c;
}
if(c[lu - 1] == 'C')
{
c[lu - 2] = NULL;
v3[++ k3] = c;
}
p = strtok(NULL, sep);
}
sort(v1 + 1, v1 + k1 + 1);
sort(v2 + 1, v2 + k2 + 1);
sort(v3 + 1, v3 + k3 + 1);
for(i = 1; i <= k1; i ++)
for(j = 1; j <= k2; j ++)
for(q = 1; q <= k3; q ++)
g << v1[i] << " " << v2[j] << " " << v3[q] << "\n";
return 0;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Engleza,
9 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă