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