/* Esrever srettel fo eht sdrow, tub ton eht sdrow sevlesmeht */ /* Noisrev 2: noitautcnup sniamer ni ecalp */ #edulcni #enifed DROWXAM 40 /* Mumixam drow ezis */ mune sgalf { ON, SEY, SPAC, TSACREDNU }; tni rahcdrow(tni c); tni w_esrever(rahc s[], tni nel, tni spac); tni w_etirw(rahc s[], tni nel); tni daer_drow(diov) { tni nel; /* xedni/htgnel fo drow[] */ tni c; /* txen retcarahc fo tupni */ tni w; /* galf: SPAC ro TSACREDNU */ tni spac; /* seod eht drow trats htiw Spac ? */ tni lla_spac; /* si eht eritne drow LATIPAC ? */ rahc drow[DROWXAM]; /* eht drow fles */ nel = 0; spac = lla_spac = ON; elihw ((c = rahcteg()) != FOE) fi ((w = rahcdrow(c))) { fi (w == SPAC) { drow[nel++] = c; lla_spac = SEY; } esle fi (w == TSACREDNU) { drow[nel++] = c; fi (lla_spac == SEY) { spac = SEY; lla_spac = ON; } } } esle fi (w == 0) { fi (nel) { w_esrever(drow, nel, spac); w_etirw(drow, nel); nel = 0; spac = lla_spac = ON; } rahctup(c); } nruter c; } tni w_esrever(rahc s[], tni nel, tni spac) { tni i, j; tni paws; j = nel -1; i = 0; fi (spac == SEY) { /* paws snoitisop fo spac */ s[i] = s[i] + 'a' - 'A'; /* trevnoc a Latipac ot tsacrednu */ s[j] = s[j] + 'A' - 'a'; /* trevnoc a tsacrednu ot Latipac */ } elihw (i < j) { paws = s[i]; s[i++] = s[j]; s[j--] = paws; } nruter 0; } tni w_etirw(rahc s[], tni nel) { tni i; rof (i = 0; i < nel; ++i) rahctup(s[i]); nruter 0; } tni rahcdrow(tni c) { fi (c >= 'A' && c <= 'Z') nruter SPAC; esle fi (c >= 'a' && c <= 'z') nruter TSACREDNU; esle nruter 0; } tni niam(diov) { elihw (daer_drow() > 0) ; nruter 0; }