/* pritnf mindcodind finala 2 */ #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define LL long long #define PII pair #define PCI pair #define VB vector #define VI vector #define VC vector #define WI vector #define WC vector #define RS resize #define X first #define Y second #define FORN(i,n) for(int i=0;i=b;--i) #define REPEAT do #define UNTIL(x) while((x)) #define IN_FILE "date.in" #define OUT_FILE "date.out" #define citire f #define scriere g ifstream f(IN_FILE); ofstream g(OUT_FILE); //variables map variables; int n; string text; int k = -1; vector vari; //other functions void reading() { citire >> n; FORN(i, n) { string aux; citire >> aux; int mi = aux.find('='); string var = aux.substr(0,mi); string te = aux.substr(mi+1,aux.length()); variables[var] = te; } getline(citire, text); getline(citire, text); f.close(); } void sym_det(int pos) { if (text[pos + 1] == 's') { text = text.substr(0, pos) + variables[vari[0]] + text.substr(pos + 2, text.length()); vari.erase(vari.begin()); } else if (text.length() - 1 >= pos + 2) { if (text[pos + 2] == 'd') { int lenght = text[pos + 1] - '0'; string v = variables[vari[0]]; vari.erase(vari.begin()); while (v.length() < lenght) { v = ' ' + v; } text = text.substr(0, pos) + v + text.substr(pos + 3, text.length()); } else if (text.length() - 1 >= pos + 3) { if (text[pos + 3] == 'f') { int lenght = text[pos + 2] - '0'; string v = variables[vari[0]]; vari.erase(vari.begin()); int pct = v.find('.') ; /* while (lenght + pct > v.length()) { v += '0'; } if (lenght + pct < v.length()) { v = v.substr(0, lenght + pct); }*/ bool looped = false; while (v.length()-pct - 1 < lenght) { v += '0'; looped = true; } if (!looped) { int le = v.length(); char cara[250]; FORN(i, v.length()) { cara[i] = v[i]; } double va = atof(cara); scriere << text.substr(0, pos); scriere << setprecision(lenght + pct) << va; k = 0; } else { scriere << text.substr(0, pos); scriere << v; } text = text.substr(pos + 4, text.length()); } } } } void solving() { int vir = text.find(','); string aux = text.substr(vir+1,text.length()); text = text.substr(0,vir); FORN(i, aux.length()) { if (aux[i] == ',') { vari.push_back(aux.substr(0,i)); aux = aux.substr(i+1,aux.length()); i = 0; } } if (aux.length() > 0) { vari.push_back(aux); } if (text[0] == '%') { sym_det(0); } for (int i = 1; i < text.length();++i) { if (text[i] == ' ' && text[i + 1] == '%') { k = -1; sym_det(i+1); if (k != -1) { i = k; } } } } void write_data() { g << text; } int main() { reading(); solving(); write_data(); }