Wortspiel erstellen (toupper / tolower)

Schnelle objektorientierte, kompilierende Programmiersprache.
Bulli
Beiträge: 7
Registriert: So Jul 06, 2014 5:29 pm

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von Bulli » Mo Jul 07, 2014 1:00 pm

Das würde jedenfalls Sinn ergeben, ich versuche es mal so einzubauen :)

nouseforname
Beiträge: 236
Registriert: Do Feb 10, 2011 6:31 pm

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von nouseforname » Mo Jul 07, 2014 1:08 pm

Bulli hat geschrieben:
Wobei ich das mit dem i%2 im Prinzip zwar verstehe, aber nicht ganz nachvollziehen kann... :(
Modulo (%) teilt ganzzahlig und gibt den Rest zurück. So kann man zB leicht feststellen ob eine Zahl gerade oder ungerade ist

Code: Alles auswählen

2 / 2 = 1 //Rest 0
3 / 2 = 1 //Rest 1
2 % 2 = 0
3 % 2 = 1

if (x % 2 == 0)
// gerade Zahl
else if (x % 2 == 1)
// ungerade Zahl
Hoffe das hilft ein wenig

Bulli
Beiträge: 7
Registriert: So Jul 06, 2014 5:29 pm

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von Bulli » Mo Jul 07, 2014 1:23 pm

Ah alles klar; ja das hilft definitiv!

Also mein Code dürfte dann ja eigentlich halbwegs in die richtige Richtung laufen denke ich

Code: Alles auswählen

#include <stdio.h>
#include <ctype.h>
#include <string.h>


int main(void)

{
    int i = 0;
    int Grenze;
    char Eingabe[50];
    printf("Geben Sie bitte einen beliebigen Text ein mit bis zu 50 Buchstaben ein!\n");
    scanf("%s",&Eingabe);

    Grenze = strlen (Eingabe);

    if (Grenze >= 50)
    {
        printf("Ihre Eingabe ueberschreitet 50 Zeichen! Das Programm wird nun beendet.");
        return (1);
    }


    for (i; i>= 50; i++)
    {
        if (i % 2 == 0)
    {
        Eingabe[Grenze] = toupper(Eingabe[i]);
        i++;

    }
    else if (i % 2 == 1)
    {
        Eingabe[Grenze] = tolower(Eingabe[i]);
        i++;
    }
    }

    printf("\nSie haben %d Zeichen und %s eingegeben",Grenze, Eingabe[Grenze]);


return(0);
}
Ich bekomme bei der Ausgabe halt (null) raus für mein String "Eingabe[Grenze].
Ich mache bestimmt irgendetwas grundlegend falsch aber ich sehe den Fehler auch nicht ganz.

Der Logik nach müsste es ja jetzt so sein, dass für gerade i toupper und ungerade i tolower angewendet wird?

Auf jeden Fall wäre ein kurzes Dankeschön angebracht an Euch!
Habe jetzt an diesem Tag mehr erreicht als in der letzten Woche.. :lol:

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von cloidnerux » Mo Jul 07, 2014 1:31 pm

Ich bekomme bei der Ausgabe halt (null) raus für mein String "Eingabe[Grenze].
das "%s" im printf erwartet einen Pointer auf den Start deines Textes, der mit einem Null-Byte(0) anbgeschlossen ist.
Eingabe[Grenze] greift auf das char in dem array "Eingabe" mit dem Index Grenze zu.
Lass den Teil [Grenze] weg und es sollte funktionieren.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Bulli
Beiträge: 7
Registriert: So Jul 06, 2014 5:29 pm

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von Bulli » Mo Jul 07, 2014 2:12 pm

Endlich, nun Endlich funktioniert es ! :D

Code: Alles auswählen

#include <stdio.h>
#include <ctype.h>
#include <string.h>


int main(void)

{
    int i = 0;
    int Grenze;
    char Eingabe[50];
    printf("Geben Sie bitte einen beliebigen Text ein mit bis zu 50 Buchstaben ein!\n");
    scanf("%s",&Eingabe);

    Grenze = strlen (Eingabe);

    if (Grenze >= 50)
    {
        printf("Ihre Eingabe ueberschreitet 50 Zeichen! Das Programm wird nun beendet.");
        return (1);
    }

    for (i=0; i<=Grenze; i++)
    {
        if (i % 2 == 0)
    {
        Eingabe[i] = toupper(Eingabe[i]);
        i++;

    }

    }

    for (i=0; i<=Grenze; i++)
    {
    if (i % 2 == 1)
    {
        Eingabe[i] = tolower(Eingabe[i]);
        i++;
    }
    }

    printf("\nSie haben %d Zeichen und %s eingegeben",Grenze, Eingabe);


return(0);
}
Das Einzige Problem stellt jetzt nur noch dar, dass wenn ich etwas mit Leerzeichen eingebe ("Morgenstund hat Gold im Mund"),
so nimmt er nur "Morgenstund" auf, den Rest missachtet er. Das ist laut Aufgabenstellung nicht gewollt, sondern soll mit eingelesen werden bis 50 Zeichen.
Ebenfalls soll es bei "nicht-Buchstaben" nicht umwandeln -> wenn z.B. Eingabe: "f5f6f9f8f5f8f7f2" kommt "F5F6F9F8F5F8F7F2" raus.
Dabei sollte es "F5f6F9f8F5f8F7f2" werden, soweit ich es richtig verstanden habe...

Ansonsten sieht das Ergebnis aber Prima aus! :)

canlot
Beiträge: 393
Registriert: Di Mär 08, 2011 11:01 pm
Wohnort: NRW

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von canlot » Mo Jul 07, 2014 3:09 pm

Ich würde nur eine Schleife mitlaufen lassen und noch eine Zählervariable nur für Buchstaben also sowas in der Art:

Code: Alles auswählen

int onlychar = 0;
 for (i=0; i<=Grenze; i++)
    {
     if(isalpha(Eingabe[i]))
     {
      if (onlychar % 2 == 1)
          tolower(Eingabe[i]);
      else
          toupper(Eingabe[i]);
     onlychar++;
     }
    }
Unwissenheit ist ein Segen

xerion21
Beiträge: 162
Registriert: Mo Jul 08, 2013 3:37 pm

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von xerion21 » Di Jul 08, 2014 6:43 am

du kannst auch jeweils überprüfen, ob die Werte in einem gewissen ASCII-Bereich sind und nur dann den Code ausführen ;)

Bulli
Beiträge: 7
Registriert: So Jul 06, 2014 5:29 pm

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von Bulli » Di Jul 08, 2014 3:26 pm

Das mit dem ASCII Bereich ist eine echt tolle Idee!
Mir wäre es jetzt zu Schade den Code weiter umzubauen da es gerade ja relativ gut funktioniert, jedoch merke ich mir das auf jeden Fall! Ist ein guter "Trick" :)

Ich kriege es zwar leider noch immer nicht hin einen String mit Komma einzulesen (Bei "advhbhe adfahbdev avrbnj rs" wird nur bis zum ersten Komma "advhbhe" eingelesen, jedoch muss ich wohl damit leben, da ich in keinster Weise bislang das Problem beheben konnte.

Jedenfalls astreine Hilfestellung eurerseits, vielen Dank!

Benutzeravatar
oenone
Beiträge: 223
Registriert: Do Sep 01, 2011 2:42 pm
Wohnort: Bremen
Kontaktdaten:

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von oenone » Di Jul 08, 2014 3:34 pm

Bulli hat geschrieben:Ich kriege es zwar leider noch immer nicht hin einen String mit Komma einzulesen (Bei "advhbhe adfahbdev avrbnj rs" wird nur bis zum ersten Komma "advhbhe" eingelesen, jedoch muss ich wohl damit leben, da ich in keinster Weise bislang das Problem beheben konnte.
Du meinst Leerzeichen, nicht Komma, oder?

Das Problem ist dein scanf-Aufruf. %s liest eben nur Nicht-Whitespace-Zeichen. Versuch es mal mit

Code: Alles auswählen

scanf("%[^\n]", &Eingabe);

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von Xin » Di Jul 08, 2014 3:36 pm

Bulli hat geschrieben:Ich kriege es zwar leider noch immer nicht hin einen String mit Komma einzulesen (Bei "advhbhe adfahbdev avrbnj rs" wird nur bis zum ersten Komma "advhbhe" eingelesen, jedoch muss ich wohl damit leben, da ich in keinster Weise bislang das Problem beheben konnte.
scanf ist eine Funktion für ->f<-ormatiertes einlesen von ASCII-Texten.

Schau Dir doch mal fgets() an. Hier steht das f vorne und deswegen für ->F<-ile. Die Konsole heißt - wenn man sie als File betrachtet - 'stdin'.

Außerdem ist scanf() gemeingefährlich beim Einlesen von Strings. (siehe Fehlerquellen)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten