Hilfe bei einem Programm

Das Forum fĂĽr Programmierer und Systemadmins. Von Shell-, Perl- und PHP-Scripts bis zur objektorientierten Programmierung mit C++.

Hilfe bei einem Programm

Beitragvon NiZo » So 19 Jun, 2005 19:57

Also ich hab ĂĽberhaupt keine Ahnung wie das geht...
Vielleicht könnt ihr mir ja helfen

Schreibe ein Programm, dass in einem String alle Worte umdreht und dabei alle Palindrome in GroĂźbuchstaben umwandelt.

Bsp.:

"Ich habe heute Otto gesehen"
"hcI ebah etueh OTTO neheseg"

Hoffe auf Antwort
NiZo
Neu im Board
Neu im Board
 
Beiträge: 3
Registriert: Di 17 Mai, 2005 19:52

Beitragvon dfx » So 19 Jun, 2005 20:00

und in welcher sprache?
xDSL unlimited 2.320 kbit/s
Bild
Bild
dfx
Board-User Level 3
Board-User Level 3
 
Beiträge: 1368
Registriert: Do 15 Jan, 2004 19:22
Wohnort: graz

Beitragvon dfx » So 19 Jun, 2005 20:04

in perl könnte das zb so aussehen:
Code: Alles auswählen
while (<STDIN>) {
        chomp;
        @x = split(/\s+/, $_);
        @y = map {
                $t = reverse($_);
                lc($t) eq lc($_) and $t = uc($t);
                $t
        } @x;
        print("@y\n");
}


Code: Alles auswählen
xwing:~# echo Ich habe heute Otto gesehen | perl foo.pl
hcI ebah etueh OTTO neheseg
xwing:~#


ps: sorry fĂĽr doppelpost, hab irgendwie aufs edit vergessen... :P
xDSL unlimited 2.320 kbit/s
Bild
Bild
dfx
Board-User Level 3
Board-User Level 3
 
Beiträge: 1368
Registriert: Do 15 Jan, 2004 19:22
Wohnort: graz

Beitragvon NiZo » So 19 Jun, 2005 20:31

Ach sorry.
In C
Ich Programmier immer mit Borland...

Hab vergessen das zu schreiben.
NiZo
Neu im Board
Neu im Board
 
Beiträge: 3
Registriert: Di 17 Mai, 2005 19:52

Beitragvon 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. :D :angel:
xDSL unlimited 2.320 kbit/s
Bild
Bild
dfx
Board-User Level 3
Board-User Level 3
 
Beiträge: 1368
Registriert: Do 15 Jan, 2004 19:22
Wohnort: graz


ZurĂĽck zu PROGRAMMIER FORUM

Wer ist online?

Mitglieder in diesem Forum: Trendiction [Crawler] und 21 Gäste