von dfx » Mo 20 Jun, 2005 17:33 
			
			na gut... also auf russisch:
- Code: Alles auswählen
 xwing:~# gcc -O2 -Wall test.c -o test
xwing:~# ./test "Ich habe heute Otto gesehen"
hcI ebah etueh OTTO neheseg
xwing:~# 
- Code: Alles auswählen
 #include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SEPSET " .()[]{},;-:\"!?&"
int main(int argc, char **argv) {
        char *s, *p, *q, *r;
        int t;
        s = argv[1];
        if (!s)
                exit(1);
        while (*s) {
                q = s;
                for (;;) {
                        p = strpbrk(s, SEPSET);
                        if (p != s)
                                break;
                        s++;
                        if (!*s)
                                break;
                }
                if (s != q)
                        printf("%.*s", (int) (s - q), q);
                if (!*s)
                        break;
                if (!p)
                        p = s + strlen(s);
                t = 1;
                r = p - 1;
                q = s;
                for (;;) {
                        if (tolower(*r) != tolower(*q))
                                t = 0;
                        if (r <= s)
                                break;
                        r--;
                        q++;
                }
                for (;;) {
                        printf("%c", t ? toupper(*q) : *q);
                        if (q <= s)
                                break;
                        q--;
                        r++;
                }
                s = r + 1;
        }
        printf("\n");
        return 0;
}
ist nicht 100% hochperformant, da könnte man noch etwas drehen... erklärung dazu gibt's keine, da sonst der lerneffekt weg is. 
 
 
			xDSL unlimited 2.320 kbit/s
