data format: oddelovacom mohlo byt oddelene meno alebo cislo alebo nezmysel. Nezmysly sa ignoruju.
forma mena: obsahuje iba pismena a medzery. meno je iba prve meno splnajuce format mena. Dalsie mena su povazovane za nezmysel. Defaultne meno je prazdny retezec.
format cisla: cislo je celociselne, moze obsahovat unarne + alebo -
Vystupny subor1: obsahuje meno na zaciatku, oddelovac a cisla upsoriadane vzostupne oddelene oddelovacom. Lexikograficky usporiadane riadky podla mena.
Vystupny subor2: meno, oddelovac, sucet cisiel. Lexikograficky usporiadane podla mena.
Vystupny subor3: meno, oddelovac, sucet cisiel. Riadky su usporiadane zostupne podla sumy cisiel.
Ak by niekto chcel zdrojak...
Kód: Vybrat vše
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <cctype>
#include <algorithm>
char oddelovac;
struct clovek {
std::string meno;
int suma;
std::vector<int> cisla;
clovek(): meno(""), suma(0) {}
};
std::vector<clovek> ludia;
bool je_platne_cislo(std::string s)
{
if (s[0] != '+' && s[0] != '-' && !std::isdigit((s[0])))
return false;
for (unsigned int i=1; i < s.length(); ++i)
if (!std::isdigit(s[i]))
return false;
return true;
}
bool je_platne_meno(std::string s)
{
for (unsigned int i=0; i < s.length(); ++i)
if (!std::isalpha(s[i]) && s[i] != ' ')
return false;
return true;
}
bool je_mensie_meno(clovek c1, clovek c2)
{
return c1.meno < c2.meno;
}
bool je_vacsia_suma(clovek c1, clovek c2)
{
return c1.suma > c2.suma;
}
int main()
{
//nacitaie vstupu
std::ifstream in("/tmp/input.txt");
std::string s;
std::getline(in,s);
oddelovac = s[0];
//nacita riadok
while (std::getline(in,s)) {
std::stringstream ss(s);
bool bolo_meno = false;
clovek cl;
//parsuje riadok
while (std::getline(ss,s,oddelovac)) {
//spracovanie poloziek riadku
if (!bolo_meno && je_platne_meno(s)) {
bolo_meno = true;
cl.meno = s;
}
if (je_platne_cislo((s))) {
std::stringstream ss2(s);
int cislo;
ss2 >> cislo;
cl.suma += cislo;
cl.cisla.push_back(cislo);
}
}
//usporiada cisla vzostupne
std::sort(cl.cisla.begin(), cl.cisla.end());
ludia.push_back(cl);
}
in.close();
std::ofstream out("/tmp/output2.txt");
for (unsigned int i=0; i < ludia.size(); ++i) {
out << ludia[i].meno << oddelovac << ludia[i].suma << "
";
}
out.close();
out.open("/tmp/output1.txt");
std::sort(ludia.begin(), ludia.end(), je_mensie_meno);
for (unsigned int i=0; i < ludia.size(); ++i) {
out << ludia[i].meno << oddelovac;
for (unsigned int i2=0; i2 < ludia[i].cisla.size(); ++i2) {
if (i2 != ludia[i].cisla.size() - 1)
out << ludia[i].cisla[i2] << oddelovac;
else
out << ludia[i].cisla[i2] << "
";
}
}
out.close();
std::sort(ludia.begin(), ludia.end(), je_vacsia_suma);
out.open("/tmp/output3.txt");
for (unsigned int i=0; i < ludia.size(); ++i) {
out << ludia[i].meno << oddelovac << ludia[i].suma << "
";
}
out.close();
}