slicing operator verwenden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ak3908s
User
Beiträge: 1
Registriert: Samstag 2. November 2019, 20:48

Hallo Leute,
Ich habe eine Frage . Wie kann ich den slicing operator verwenden um meine Aufgabe lösen zu können?
Soll ich beliebge Sätze auswählen und dann den operator nutzen?
nacher muss ich dann die beiden Sätze voneinander trennen. Kann jemand mir bitte helfen?
DANKE!


Welche zwei Sätze verbergen sich hinter dem folgenden Buchstabensalat?

"ASuesi nd eomd eAru ghea latu sn idcehmt SSieninn.."
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Was machen die Parameter, die man beim Slicing angeben kann?
Und wie könnte man die verwenden um aus dem Buchstabensalat einen sinnvollen Satz zu holen?

Wenn man den Satz in Code-Tags postet, behält er auch die korrekten Leerzeichen

Code: Alles auswählen

"ASuesi nd eomd eAru ghea latu sn idcehmt  SSieninn.."
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Beziehe mal insbesondere den Start und den Step Parameter mit ein...
Benutzeravatar
__blackjack__
User
Beiträge: 14050
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

In Racket (Lisp/Scheme-Dialekt) könnte eine Lösung so aussehen:

Code: Alles auswählen

#!/usr/bin/env racket
#lang racket

(define *sentences* "ASuesi nd eomd eAru ghea latu sn idcehmt  SSieninn..")

(define (get-sentence s n)
  (list->string (sequence->list (in-string s n #f 2))))

(for ([i (in-range 2)])
  (displayln (get-sentence *sentences* i)))
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Auch machbar auf verschiedene Arten mit Zeigern in C (den Ansatz etwas versteckt, damit es nicht zu einfach ist):

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
    char *string, *s;

    string = "ASuesi nd eomd eAru ghea latu sn idcehmt  SSieninn..";

    for (s = string; *s; ++s)
        putchar(*s++);
    putchar('\n');

    while (*++string)
        putchar(*string++);
    putchar('\n');

    return 0;
}
Benutzeravatar
__blackjack__
User
Beiträge: 14050
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@snafu: Da würde ich aber dringend vorher prüfen das die Länge der Zeichenkette gerade ist, sonst kann das ins Auge gehen. Und leer darf die Zeichenkette auch nicht sein.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Oder direkt strlen() verwenden, ist schon klar. Aber nicht kryptische C-Programme, die fehlerfrei laufen, sind nichts für coole Skript-Kiddies wie mich... :lol:
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hier mit ausgegliederter Entschlüsselung und etwas robuster implementiert. Das Entschlüsseln wird nun in einem Durchlauf erledigt.

Code: Alles auswählen

#include <stdio.h>

#define MAX_SIZE (1 << 8)

#define TEXT "ASuesi nd eomd eAru ghea latu sn idcehmt  SSieninn.."

void decrypt(char *string, char *a, char *b)
{
    do {
        *a = *string++;
        *b = *string++;
    } while (*a++ && *b++);
}

int main(void)
{
    char a[MAX_SIZE], b[MAX_SIZE];

    decrypt(TEXT, a, b);
    printf("%s\n%s\n", a, b);

    return 0;
}
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

@snafu: das berücksichtigt immer noch nicht, dass die Länge des Strings gerade ist.

Code: Alles auswählen

void decrypt(char *string, char *a, char *b)
{
    while((*a++ = *string++) && (*b++ = *string++));
    *a = *b = '\0';
}
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Stimmt, das ist besser. Einfach die Zuweisung auswerten. Dann wird auch in jedem Fall beim \0 Byte gestoppt. :idea:
Antworten