/**
* Titkosírás: Kérjen be egy max. 1000 karakterből álló szöveget, majd a szöveg szavait adott kódrendszer
* segítségével írassa ki kódoltan is. A kódolás szabálya is jelenjen meg a képernyőn.
* Pl.: "Sok alma van az almafa alatt.". Kódolás: al=A, fa=B. Az új szöveg: "Sok Ama van az AmaB Aatt."
*/
#include <iostream>
#include <string>
using namespace std;
//Elődeklaráció
void kodol(const char* elotte, string& utana);
//Főprogram
int main(){
const int meret=1001;
char cin_szoveg[meret];
cin_szoveg[meret-1]=0;
cin.get(cin_szoveg, meret); //beolvasunk a standard inputról "meret" mennyiségű szöveget
string utana(cin_szoveg); //lemásoljuk stringbe a bepötyögött szöveget
kodol(cin_szoveg, utana);
cout<<"Elotte:\t"<<cin_szoveg<<endl
<<"Utana:\t"<<utana<<endl; //kiírjuk utána
return 0;
}
/// Kódolás
void kodol(const char* elotte, string& utana){
const int SOROK=3;
const int OSZLOPOK=2;
char* betucsere[SOROK][OSZLOPOK]=
{
{"al", "A"},
{"fa", "B"},
{"Sok","25"}
};
//figyelem! az alábbi csak akkor működik helyesen, ha a keresett karaktersorozat rövidebb, mint amivel kicseréljük! (pl. betucsere[1][0] ("al") rövidebb, mint betucsere[1][1] ("A")
for(int i=0;i<SOROK;i++){ //végigmegyünk a "titkosítandókon"
for(unsigned j=0;j<utana.size(); ){ //végigmegyünk a karaktersorozaton, és minden előforduló "titkosítandót" cserélünk
size_t talaltpoz=utana.find(betucsere[i][0],j); //pl. keressük az "al"-t a j. pozíciótól
if (talaltpoz!=string::npos){ //talált
utana.replace(talaltpoz, strlen(betucsere[i][0]), betucsere[i][1]); //helyettesítjük a "talaltpoz" pozícióban lévő, "betucsere[i][0]" hosszúságú szöveget ("al") "betucsere[i][1]" szöveggel ("A")
j=talaltpoz+strlen(betucsere[i][1]); //a j. pozíció: csak a már lecserélt szöveg UTÁNI karaktersorozatot érdemes megvizsgálni
}
else break; //ha egyáltalán nem találtunk, felesleges tovább vizsgálódni, megnézzük a következő keresett elemet (külső ciklus)
}
}
}