- folderul este un fişier de tip special, care poate conţine fişiere şi/sau foldere (acestea fiind considerate subfoldere ale folderului respectiv);
- numele folderelor încep cu o literă, au maxim
30
de caractere și sunt scrise cu majuscule; - numele fișierelor de date încep cu o literă, au maxim
30
de caractere și sunt scrise cu minuscule; - caracterele utilizate pentru numele fişierelor şi folderelor sunt literele alfabetului englez şi cifrele arabe;
- reprezentarea structurii fişierelor sub forma unui şir de caractere se realizează după următoarea regulă:
NUME_FOLDER(lista_de_foldere_si_fisiere)
, undelista_de_foldere_si_fisiere
, posibil vidă, conţine fişierele şi/sau subfolderele folderuluiNUME_FOLDER
, separate prin virgulă. Subfolderele se reprezintă respectând aceeaşi regulă.
De exemplu, structura de fişiere şi foldere din figura de mai jos:
se reprezintă prin şirul de caractere: FOLDER1(FOLDER2(),FOLDER3(FOLDER4(poveste,basm),basm))
Cerința
Scrieţi un program care, cunoscând şirul de caractere ce codifică o structură de fişiere de pe disc, determină calea pentru fiecare fişier de date din structură. Prin cale a unui fişier se înţelege o succesiune de foldere, fiecare folder fiind urmat de caracterul \(backslash)
, începând de la folderul aflat pe cel mai înalt nivel al structurii (primul specificat în şirul ce codifică structura de fişiere), până la subfolderul în care se află fişierul de date respectiv şi terminată cu numele fişierului. Căile determinate vor fi afişate în ordine lexicografică.
Date de intrare
Fișierul de intrare dir.in
conţine pe prima linie şirul de caractere ce codifică structura de fişiere de pe disc.
Date de ieșire
Fișierul de ieșire dir.out
va conţine pe prima linie un număr natural N
reprezentând numărul de fişiere de date găsite. Pe următoarele N
linii se vor scrie, în ordine lexicografică, căile ce permit identificarea fişierelor găsite, în formatul: F1\F2\...\Fn\fisier
, câte o cale pe o linie.
Restricții și precizări
- Şirul de caractere ce codifică structura de fişiere este nevid şi conţine maxim
1600
de caractere. - Structura de foldere conţine cel puţin un folder şi cel puţin un fişier.
- Numărul de fişiere de date este cel mult
100
. - Lungimea căii unui fişier este de cel mult
255
caractere.
Exemplu
dir.in
FOLDER1(FOLDER2(),FOLDER3(FOLDER4(poveste,basm),basm))
dir.out
3 FOLDER1\FOLDER3\FOLDER4\basm FOLDER1\FOLDER3\FOLDER4\poveste FOLDER1\FOLDER3\basm
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema dir:
#include <bits/stdc++.h>
using namespace std;
char s[1605], st[1002][35], f[102][260];
int n;
int main()
{
int top, k, i, j;
char folder[35];
char fisier[35];
char cale[260];
ifstream fin("dir.in");
ofstream fout("dir.out");
fin >> s;
top = 0;
for (i = 0; s[i] != 0; )
{
if ('A'<= s[i] && s[i] <= 'Z')
{
k = 0;
while (s[i] != 0 && s[i] != ')' && s[i] != '(' && s[i] != ',')
{
folder[k++] = s[i];
i++;
}
folder[k] = 0;
top++;
strcpy(st[top],folder);
}
else if ('a'<= s[i] && s[i] <= 'z')
{
k = 0;
while (s[i] != 0 && s[i] != ')' && s[i] != '(' && s[i] != ',')
{
fisier[k++] = s[i];
i++;
}
fisier[k] = 0;
//st=F1, F2, F3
strcpy(cale,st[1]);
strcat(cale,"\\");
for (j = 2;j<=top; j++)
{
strcat(cale,st[j]);
strcat(cale,"\\");
}
strcat(cale,fisier);
n++;
strcpy(f[n],cale);
}
else if (s[i] == '(') i++;
else if (s[i] == ',') i++;
else if (s[i] == ')')
{
i++;
top--;
}
}
/// sortare
for (i = 1; i < n; ++i)
for (j = i + 1; j <= n; j++)
if (strcmp(f[i], f[j]) > 0)
{
strcpy(cale, f[i]);
strcpy(f[i], f[j]);
strcpy(f[j], cale);
}
fout << n << "\n";
for (i = 1; i <= n; i++)
fout << f[i] << "\n";
fout.close();
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #2168 dir
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2168 dir de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!