C String verdoppeln,spiegeln etc.

Zeboo

Lt. Commander
Registriert
Juli 2008
Beiträge
1.562
Hallo. Mich fragte ein Schülerkumpel von mir ob ich mal paar leichte C Aufgabe könnte? Zum Beispiel Dopplung:
PHP:
char text[] = hallo// daraus soll eine neue Char gemacht werden: hallo => hallohallo
, ja gut das würde ich einfach mit strcmp zusammenkleben und in eine neue char array schreiben.

Aber bei der spiegelung: hallo => ollah und vorallem bei der hallo => hhaalllloo wusste ich keine fertige funktion. Kennt da jemand was?

Gruß
 
Jop ich glaub der Lehrer hat euch die Aufgaben gestellt um zu lösen und nicht um zu suchen.. ;)
Auch wenn Google alles weiss...
(Ich bin am C++ lernen, kenne deine Situation also..)

Ist doch ganz einfach.. da der String ja schon in einem Char-Array ist..
Kleiner Tipp:

Spiegelung: For-Schleife von 4 herunterzählend. 4 3 2 1 0

"Dopplung":
For 0 bis 4 {
for 0 bis 2 {
tu etwas, z.b. ausgeben
}
}

(Die erste schleife beinhaltet dein Index, den du fürs ausgeben benötigst)

Hoffe ich habe jetzt nicht zuviel verraten..
 
Zeboo schrieb:
Code:
char text[] = hallo// daraus soll eine neue Char gemacht werden: hallo => hallohallo
, ja gut das würde ich einfach mit strcmp zusammenkleben und in eine neue char array schreiben
na dann viel Erfolg!
 
Mit strcmp() zusammenkleben? Phantastische Idee. Na dann los!
 
sieht ehe nach info 2 aufgabe aus! war das nicht zufällig mit turing maschinen?
hatte eigentlich damals glück das bei mir nur theorie gab und keine praktische aufgaben... die armen schweine von heute müssen noch viel dazu programmieren :D

ein tip ist wie oben angedeutet... mach mit for schleife und vergleich den aktuellen char mit deinen der verdoppelt werden soll... ich würde aber dann einen lookup nach hinten und vorne noch dazuimplementieren. dann kann dein programm schön... und schreib nicht in den selben char rein... zumindest nicht am anfang ;)

viel spass....

ps: die aufgabe hatte ich gerade in meinen code selbst gelöst... diese war aber bisschen anders. zumindest musste ich das für ein Projekt (echte arbeit und keine hausaufgabe) machen. bei mir musste man aber nur eine stelle nach hinten oder vorne lookupen :D
 
Zuletzt bearbeitet:
Alle Antworten sind schlecht.

1. hi[] ist ein Byte zu lang.
2.a. Funktioniert nur, wenn text[] höchstens 5 Zeichen (+ Nullbyte) lang ist.
2.b. Wenn i = 5 ist, wird 4 - i kleiner als 0. Das gibt einen Speicherzugriffsfehler.
3. Siehe 2a. Außerdem ist i2 überflüssig.

Bessere Antwort folgt:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void display(char *str) {
    if(str) {
        printf("%s\n", str);
        free(str);
    }
}


char *twice(const char *input) {
    char *output;
    int i;
    const int l = strlen(input);

    if((output = malloc(2 * l + 1)) == NULL)
        return NULL;

    for(i = 0; i < l; i++)
        output[i] = output[i + l] = input[i];
    output[2 * l] = '\0';

    return output;
}

char *mirror(const char *input) {
    char *output;
    int i = 0;
    const int l = strlen(input);

    if((output = malloc(l + 1)) == NULL)
        return NULL;

    for(i = 0; i < l; i++)
        output[l - i - 1] = input[i];
    output[l] = '\0';

    return output;
}

char *dblchr(const char *input) {
    char *output;
    int i;
    const int l = strlen(input);

    if((output = malloc(2 * l + 1)) == NULL)
        return NULL;

    for(i = 0; i < l; i++)
        output[2 * i] = output[2 * i + 1] = input[i];
    output[2 * l] = '\0';

    return output;
}

int main(int argc, char **argv) {
    if(argc < 2) {
        fprintf(stderr, "USAGE: %s <word>\n", argv[0]);
        return EXIT_FAILURE;
    }

    display(twice(argv[1]));
    display(mirror(argv[1]));
    display(dblchr(argv[1]));

    return EXIT_SUCCESS;
}
 
Zuletzt bearbeitet:
Was nützt das wen der Lehrer staunt, aber man es selbst nicht versteht ...

MFG Technoboy
 
Dann fordere ich hiermit jemanden, der sich berufen fühlt auf, nach einer schlechten und einer komplizierten
Lösung eine gute und verständliche zu liefern.
 
Zuletzt bearbeitet:
asdfman schrieb:
1. hi[] ist ein Byte zu lang.

Bist du dir da sicher? Ich glaube "sizeof(text)" ist identisch zu "sizeof(char*)" und dürfte also 4 Byte liefern. Damit wäre hi insgesamt nur 8 Bytes lang und deshalb 3 Bytes zu kurz. Kann mich aber täuschen; meine C Kenntnisse sind eher schwach.

Ändert natürlich nichts daran, dass deine Antworten richtig sind.
 
Ich muss gestehen, dass ich mir auch nicht 100% sicher war. Habe es eben ausprobiert und bekam hiermit 10 zurück:
Code:
#include <stdio.h>
int main(void) {
    char test[] = "testpeter"; 
    printf("%d\n", sizeof(test));
    return 0;
}
 
test ist hier ein Array, kein Zeiger, und sizeof liefert bei Array-Variablen die tatsächliche Größe in Bytes zurück, also Anzahl Elemente mal Größe eines Elements. In diesem Fall 10 Zeichen (9 echte + Null-Terminator) mal 1 Byte.
 
Zuletzt bearbeitet:
Zurück
Oben