// Tóth Patrik, ZLIMO5
// GAMF, 2018 | Algoritmusok
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct adatsor {
string szo;
string kod;
};
int getKeyValue(char c) {
switch (c) {
case 'a': return 2; break;
case 'b': return 2; break;
case 'c': return 2; break;
case 'd': return 3; break;
case 'e': return 3; break;
case 'f': return 3; break;
case 'g': return 4; break;
case 'h': return 4; break;
case 'i': return 4; break;
case 'j': return 5; break;
case 'k': return 5; break;
case 'l': return 5; break;
case 'm': return 6; break;
case 'n': return 6; break;
case 'o': return 6; break;
case 'p': return 7; break;
case 'q': return 7; break;
case 'r': return 7; break;
case 's': return 7; break;
case 't': return 8; break;
case 'u': return 8; break;
case 'v': return 8; break;
case 'w': return 9; break;
case 'x': return 9; break;
case 'y': return 9; break;
case 'z': return 9; break;
default: return -1;
}
}
string convertToKeys(string szo) {
string kimenet = "";
for (char& c : szo) {
kimenet = kimenet + to_string(getKeyValue(c));
}
return kimenet;
}
int main() {
// 1. feladat
string szo;
cout << "Kerem a szot: ";
cin >> szo;
cout << " Billentyukkel: " << convertToKeys(szo);
cout << "\n\n";
// 2. feladat
adatsor adatbazis[600];
ifstream be("szavak.txt");
if (be.fail()) { cerr << "Hiba a fajl megnyitasakor!"; system("pause"); exit(1); }
int db = 0; // sorok száma, kellhet
for (int i = 0; i < 600 && !be.eof(); i++) {
be >> adatbazis[i].szo;
adatbazis[i].kod = convertToKeys(adatbazis[i].szo);
db++;
}
be.close();
// 3. feladat
int hossz = 0;
string leghszo;
string seged;
int seged2;
for (int x = 0; x < db; x++) {
seged = adatbazis[x].szo;
seged2 = seged.size();
if (seged2 > hossz) {
hossz = seged2;
leghszo = adatbazis[x].szo;
}
}
cout << "A leghosszabb szo a " << leghszo << ", " << hossz << " karakter hosszu.\n\n";
// 4. feladat
int sum = 0;
for (int x = 0; x < db; x++) {
seged = adatbazis[x].szo;
seged2 = seged.size();
if (seged2 >= 5) {
sum++;
}
}
cout << sum << " db rovid szo talalhato a fajlban.\n\n";
// 6. feladat
ofstream ki("kodok.txt");
for (int x = 0; x < db; x++) {
ki << adatbazis[x].kod << "\n";
}
ki.close();
// 7. feladat
string szamsor;
cout << "Kerek egy kodot: ";
cin >> szamsor;
cout << "Szo/szavak, amelyekre megfelel:\n";
for (int x = 0; x < db; x++) {
if (adatbazis[x].kod == szamsor) {
cout << " " << adatbazis[x].szo;
}
}
cout << "\n\n";
// 8. feladat
cout << "Szavak, amelyekhez tobb kod tartozik:\n";
string temp;
for (int i = 0; i < db - 1; i++) {
for (int j = i + 1; j < db; j++) {
if (adatbazis[i].kod > adatbazis[j].kod) {
temp = adatbazis[i].kod;
adatbazis[i].kod = adatbazis[j].kod;
adatbazis[j].kod = temp;
}
}
}
for (int i = 1; i < db; i++) {
if (adatbazis[i].kod == adatbazis[i - 1].kod) {
cout << adatbazis[i - 1].szo << " : " << adatbazis[i - 1].kod << "; ";
cout << adatbazis[i].szo << " : " << adatbazis[i].kod << "; ";
}
}
cout << "\n\n";
// 9. feladat
string elozokod = "";
string elozonagyobb = "";
int elozomenny = 0;
int ujmenny = 0;
//string elozomenny = "";
for (int i = 0; i < db; i++) {
if (adatbazis[i].kod == elozokod) {
ujmenny++;
}
else {
if (ujmenny > elozomenny) {
elozomenny = ujmenny;
elozonagyobb = elozokod;
}
ujmenny = 1;
}
elozokod = adatbazis[i].kod;
}
cout << "A legtobb szot a " << elozonagyobb << " kodhoz tartalmazza az adatbazis. A kovetkezoek:\n";
for (int i = 0; i < db; i++) {
if (adatbazis[i].kod == elozonagyobb) {
cout << " " << adatbazis[i].szo << "\n";
}
}
cout << "\n\n";
system("pause");
return 0;
}