Zum Inhalt springen

Wort in umgekehrter Reihenfolge ausgeben


Empfohlene Beiträge

Geschrieben
  TDM schrieb:
Wieso schreiben? Ich lese ja aus.
Die Funktion gets liest von der Standardeingabe und schreibt in den Puffer, den du ihr übergibst.
  TDM schrieb:
zweiter Durchlauf: c = ?

'a' oder 'b'?

Warum sollte beim zweiten scanf-Aufruf das erste Zeichen nochmal gelesen werden?
  • Antworten 72
  • Erstellt
  • Letzte Antwort

Top-Benutzer in diesem Thema

Geschrieben
  Klotzkopp schrieb:
Die Funktion gets liest von der Standardeingabe und schreibt in den Puffer, den du ihr übergibst.

hm, ok. Dann nur *(stdin->_ptr).

  Klotzkopp schrieb:

Warum sollte beim zweiten scanf-Aufruf das erste Zeichen nochmal gelesen werden?

Weil ich nicht weiß, ob sich scanf merkt, wo es zuletzt bei stdin gelesen hat.

Wenns so ist, dann könnte man das ganze ja auch ohne Rekursion und nur mit Schleifen machen. :floet:

Geschrieben
  TDM schrieb:
hm, ok. Dann nur *(stdin->_ptr).
Wie gesagt, es ist nicht festgelegt, welche Member die FILE-Struktur hat.
  TDM schrieb:
Weil ich nicht weiß, ob sich scanf merkt, wo es zuletzt bei stdin gelesen hat.
Na sicher.
  TDM schrieb:
Wenns so ist, dann könnte man das ganze ja auch ohne Rekursion und nur mit Schleifen machen. :floet:
Bedenke aber, dass du laut Aufgabenstellung kein Array benutzen darfst ;)
Geschrieben

Wie weit geht die Definition von Array ;)


char* reverse(char* input,int length)

{

        char* output = malloc(sizeof(char)*length);


        for(int i=length;i>=0;i--) {

                *(output+(sizeof(char)*(length-i))) = *(input+(sizeof(char)*i));

        }


        return output;

}


Geschrieben

Kein Malloc ;)

#include "stdio.h"

#include "stdlib.h"


int main(void)

{

        char* input = "abc";

        int length = 2;


        printf("Input: %s",input);


        printf("\n Output: ");


        for(int i=length;i>=0;i--) {

                printf("%c",*(input+(sizeof(char)*i)));

        }


        printf("\n");


        return 0;


}

Geschrieben
  Wodar Hospur schrieb:
Wie weit geht die Definition von Array ;)

strings/long pointer/char pointer sind im Endeffekt Arrays.

bzw. was wenn ich in deinem Beispiel 3 Zeichen eingeb?!

Geschrieben
  Wodar Hospur schrieb:
Structs auch, sonst könnte das Ganze auch einfach mit einer verketteten Liste erreicht werden.

Liste = Array

  Wodar Hospur schrieb:

An mich gerichtet?

Ja, weil:

int length = 2;

//...

for(int i=length;i>=0;i--) {

//...

Da würde er ja immer nur 2 mal reingehen und 2 Zeichen des Strings ausgeben.

Geschrieben (bearbeitet)

Eine verkettete Liste ist prinz. != Array.

int length = 2;

//...

for(int i=length;i>=0;i--) {

//...

Nein da eine Prüfung ja von i>=0 erfolgt, sprich:

2>=0 (right)

1>=0 (right)

0>=0 (right)

-1>=0 (false, hier reichts)

Bearbeitet von Wodar Hospur
Geschrieben
  Wodar Hospur schrieb:
Eine verkettete Liste ist prinz. != Array.

Natürlich.

Array = Adresse von Wert 0 mit Verweißadresse auf Wert 1...n = verkette Liste

Die Tatsache, dass du bei Arrays eine feste Größe angeben musst und eine verkette Liste sich dynamisch erweitert, ändert nichts an der Tatsache, dass Listen Arrays sind.

  Wodar Hospur schrieb:

Nein da eine Prüfung ja von i>=0 erfolgt, sprich:

2>=0 (right)

1>=0 (right)

0>=0 (right)

-1>=0 (false, hier reichts)

Angenommen ich geb "ab" (zwei zeichen) ein.

2 = '\0'

1 = 'b'

0 = 'a'

Geschrieben (bearbeitet)
int main(void)

{

        char* input = "abc";


        int length = sizeof(input) / sizeof(input[0]);


        printf("\n\n%s", input);

        printf("%i\n\n", length);


        printf("\n Output: ");


        for(int i=length;i>=0;i--) {

                printf("%c",*(input+(sizeof(char)*i)));

        }


        printf("\n");


        return 0;

}

Erfolgt die Berechnung von length richtig, entsprechend wird auch die abschließende '\0' mit ausgegeben.

Und ein Array zeigt sich dadurch aus das du KEINE verkettung der Elemente hast.

Array= x*Feldgröße, navigieren erfolgt per x, sprich der Speicher muss auch direkt zusammenliegen....

Während Listen den Vorteil haben das durch Zeiger der Speicher liegen kann wo er mag.

Beides sind Container, aber das war es auch schon mit der Gemeinsamkeit.

Bearbeitet von Wodar Hospur
Geschrieben
  Wodar Hospur schrieb:
int main(void)

{

        char* input = "abc";


        int length = sizeof(input) / sizeof(input[0]);


        printf("\n\n%s", input);

        printf("%i\n\n", length);


        printf("\n Output: ");


        for(int i=length;i>=0;i--) {

                printf("%c",*(input+(sizeof(char)*i)));

        }


        printf("\n");


        return 0;

}

Erfolgt die Berechnung von length richtig, entsprechend wird auch die abschließende '\0' mit ausgegeben.

Das mag ja schön und gut sein, aber sobald der User was eingeben will (was du hier nichtmal implementiert hast) und das ist länger als 3 Zeichen, hast du sogesehen ein Problem.

  Wodar Hospur schrieb:

Und ein Array zeigt sich dadurch aus das du KEINE verkettung der Elemente hast.

Array= x*Feldgröße, navigieren erfolgt per x, sprich der Speicher muss auch direkt zusammenliegen....

Während Listen den Vorteil haben das durch Zeiger der Speicher liegen kann wo er mag.

Wo die Positionen im Speicher für die einzelnen Elemente sind, ist irrelevant für die Definition eines Arrays.

Geschrieben
  TDM schrieb:

Die Tatsache, dass du bei Arrays eine feste Größe angeben musst und eine verkette Liste sich dynamisch erweitert, ändert nichts an der Tatsache, dass Listen Arrays sind.

Verkettete Listen und Arrays sind unterschiedlich: Auf die Elemente eines Arrays kann in beliebiger Reihenfolge in O(1) zugegriffen werden.

Geschrieben

Ich habs am ende so gemacht:)

char einlesen(char a)

{

if(ende == 0) {

scanf("%c",&a); }

if (a == '#') {

ende = 1;

}

return a;

}

und diese dann 10 mal aufgerufen:) Der Benutzer muss halt am Ende mit einer # Bestätigen:)

Geschrieben

Ich wollte dazu auch schon was schreiben, habs mir dann aber verkniffen.

Nun füge ich nur noch ein Zitat an:

  Klotzkopp schrieb:
Genau diese Einstellung, gepaart mit Inkompetenz, sichert mir meinen Job. Weiter so :D

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Weiterlesen  

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...