#include #include #include char *getradek(void) { char *text = malloc(sizeof(char)); int i=1; int c; while((c=getchar())!='\n'){ if(c==EOF){ if(i>1){ return text; }else{ return NULL; } }else{ text = realloc(text, sizeof(char) * (i+1)); text[i-1]=c; text[i]='\0'; i++; } } return text; } char *getslovo(int por, char *radek) { int i = 0, j = 0, slovoNow = 1; char *vysledek = NULL; int n; vysledek = (char *) malloc(sizeof(char) * 20); while(radek[i] != '\0'){ n=radek[i]; if(n==' '){ if(slovoNow == por){ vysledek[j]='\0'; return vysledek; }else{ slovoNow++; j=0; } }else{ vysledek[j]=radek[i]; j++; } i++; } if(slovoNow == por){ vysledek[j]='\0'; return vysledek; }else{ return NULL; } } int main(void) { long cislo; char *text = NULL; char *vysl = NULL; int neg; int akt_slovo; int done = 0; int is_mil; int is_th; int part_mil; int part_th; int bylojednou = 0; while(done == 0) { neg = 0; akt_slovo = 1; is_mil = 0; is_th = 0; part_mil=0; part_th=0; text = getradek(); if(text == NULL) return 0; if(bylojednou == 0) bylojednou = 1; else printf("\n"); cislo = 0; while((vysl = getslovo(akt_slovo, text)) != NULL) { if(strcmp(vysl, "negative") == 0) neg = 1; if(strcmp(vysl, "one") == 0) cislo++; if(strcmp(vysl, "two") == 0) cislo += 2; if(strcmp(vysl, "three") == 0) cislo += 3; if(strcmp(vysl, "four") == 0) cislo += 4; if(strcmp(vysl, "five") == 0) cislo += 5; if(strcmp(vysl, "six") == 0) cislo += 6; if(strcmp(vysl, "seven") == 0) cislo += 7; if(strcmp(vysl, "eight") == 0) cislo += 8; if(strcmp(vysl, "nine") == 0) cislo += 9; if(strcmp(vysl, "ten") == 0) cislo += 10; if(strcmp(vysl, "eleven") == 0) cislo += 11; if(strcmp(vysl, "twelve") == 0) cislo += 12; if(strcmp(vysl, "thirteen") == 0) cislo += 13; if(strcmp(vysl, "fourteen") == 0) cislo += 14; if(strcmp(vysl, "fifteen") == 0) cislo += 15; if(strcmp(vysl, "sixteen") == 0) cislo += 16; if(strcmp(vysl, "seventeen") == 0) cislo += 17; if(strcmp(vysl, "eighteen") == 0) cislo += 18; if(strcmp(vysl, "nineteen") == 0) cislo += 19; if(strcmp(vysl, "twenty") == 0) cislo += 20; if(strcmp(vysl, "thirty") == 0) cislo += 30; if(strcmp(vysl, "forty") == 0) cislo += 40; if(strcmp(vysl, "fifty") == 0) cislo += 50; if(strcmp(vysl, "sixty") == 0) cislo += 60; if(strcmp(vysl, "seventy") == 0) cislo += 70; if(strcmp(vysl, "eighty") == 0) cislo += 80; if(strcmp(vysl, "ninety") == 0) cislo += 90; if(strcmp(vysl, "hundred") == 0) cislo*=100; if(strcmp(vysl, "thousand") == 0) { is_th = 1; part_th=cislo; cislo=0; } if(strcmp(vysl, "million") == 0){ is_mil = 1; part_mil=cislo; cislo=0; } akt_slovo++; free(vysl); } cislo+=1000000*part_mil+1000*part_th; if(neg == 1) cislo *= -1; printf("%ld", cislo); free(text); } return 0; }