#include #include //#define MYHERE printf("here!\n") #define MYHERE (void)0 bool znamenko = false; struct token { const char *s; int v; }; //{ "", }, token tokens[] = { { "eight", 8}, { "eighteen", 18 }, { "eighty", 80 }, { "eleven", 11 }, { "fifteen", 15 }, { "fifty", 50 }, { "five", 5 }, { "forty", 40 }, { "four", 4 }, { "fourteen", 14 }, { "hundred", 100}, { "million", 1000000 }, { "negative", -1 }, { "nine", 9}, { "nineteen", 19}, { "ninety", 90 }, { "one", 1}, { "seven", 7 }, { "seventeen", 17 }, { "seventy", 70 }, { "six", 6}, { "sixteen", 16 }, { "sixty", 60 }, { "ten", 10}, { "thirteen", 13 }, { "thirty", 30}, { "thousand", 1000 }, { "three", 3}, { "twelve", 12 }, { "twenty", 20}, { "two", 2 }, { "zero", 0 }}; char *radek; char *slovo; char *posledni; int delka_radku; int Search (const char *st) { for (int i = 0; i < sizeof(tokens); i++) { if (strcmp (tokens[i].s, st) == 0) return tokens[i].v; } printf ("chybny token\n"); return 0; } int GetNextToken() { if ( (posledni - radek) < delka_radku ) { sscanf(posledni, "%s", slovo); posledni += strlen(slovo) + 1; return Search(slovo); } return -2; } int jednotky(int b); int desitky(int b); int stovky(int b); int start() { int a = GetNextToken(); if (a == -1) return -1 * jednotky( a ); return jednotky( a ); } int jednotky(int b) { if (b == 0) return 0; return desitky(b); } int desitky(int b) { int a = GetNextToken(); if (0 <= a && 9 >= a) return desitky(b+a); if (100 <= a && 1000000 >= a) return stovky(a * b); return b; } int stovky(int b) { int a = GetNextToken(); if (1 <= a && 90 >= a) return desitky(b +a); return b; } int main (void) { radek = new char [1048]; slovo = new char [1048]; char *posledni2; while ( gets (radek) != 0 ) { delka_radku = strlen(radek); if (delka_radku < 2) return 0; posledni = radek; printf("%d\n", start()); /* posledni = radek; const int delka_radku = strlen (radek); while (strlen (posledni) > 3 ) { sscanf (posledni,"%s", slovo); MYHERE; posledni += strlen (slovo) + 1; MYHERE; printf ("%i '%s'\n", Search (slovo), slovo); MYHERE; } MYHERE; */ } MYHERE; return 0; }