Wortspiel erstellen (toupper / tolower)

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

Wortspiel erstellen (toupper / tolower)

Beitrag von Bulli » So Jul 06, 2014 5:43 pm

Hallo!

Und zwar plagt mich folgendes Problem:

Ich soll es hinkriegen, einen beliebigen Text mit höchstens 50 Zeichen einzulesen (Benutzereingabe)
Dafür sollte scanf("%[^\n], textvariable] benutzt werden.
Die Zeichenfolge kann auch Leerzeichen enthalten.
Ich soll jeden ersten Buchstaben und jeden 2n+1 .ten Buchstaben des Strings in einen Großbuchstaben umwandeln.
Die restlichen (2n) Buchstaben sollen in Kleinbuchstaben umgewandelt werden.

Aus "Meerrettich" würde somit "MeErReTtIcH" werden.
Sollte im String jedoch ein Zeichen enthalten sein, welches kein Buchstabe ist, so soll dieses Zeichen nicht umgewandelt werden.
Benutzen soll ich die Funktionen isalpha, isupper, toupper und tolower aus der ctype.h Bibliothek

Anschließend muss dieser String ausgegeben werden.


Ich hatte verschiedene Aufgaben, welche ich alle nach einigen (teilweise großen) Problemen lösen konnte, jedoch komme ich
bei dieser Aufgabe überhaupt nicht zurecht und habe mich seit Tagen darin festgebissen.

Ich programmiere in Codeblocks mit dem GNU GCC Compiler in C.

Ich würde mich über jede konstruktive Hilfestellung erfreuen!

Benutzeravatar
Bebu
Beiträge: 562
Registriert: Mi Okt 21, 2009 6:19 pm
Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von Bebu » So Jul 06, 2014 6:01 pm

Was hast du denn bisher an Code geschrieben? Sag jetzt nicht: "Gar nichts" sonst landest du bei "Wer macht meine Hausaufgaben" :)

Das klingt nach nichts, was eine Schleife und ein paar If-Abfragen nicht lösen könnten.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!

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

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von nouseforname » So Jul 06, 2014 7:04 pm

Ich hab diese Aufgabe mal genutzt meine neu erworbenen Python Kenntnisse zu testen. Das ist dann nicht die Lösung die hier benötigt wird, aber vielleicht eine Hilfestellung.
Das ganze ist nicht wirklich schwer und mit ein paar Zeilen zu bewältigen, und da ist mein Python-Code wahrscheinlich nichtmal perfekt.

So sieht das ganze also aus:

Code: Alles auswählen

#txt = raw_input("Eingabe: ")
txt = "MEERRETTICH _ 12345 _ alles _ klein"
res = ""
for i in range(len(txt)):
    if txt[i].isalpha():
        if i % 2 == 0:
            res += txt[i].upper()
        else:
            res += txt[i].lower()
    else:
        res += txt[i]
    
print(res)
Ergebnis:

Code: Alles auswählen

MeErReTtIcH _ 12345 _ AlLeS _ KlEiN

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

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von xerion21 » So Jul 06, 2014 10:52 pm

nouseforname hat geschrieben:Ich hab diese Aufgabe mal genutzt meine neu erworbenen Python Kenntnisse zu testen. Das ist dann nicht die Lösung die hier benötigt wird, aber vielleicht eine Hilfestellung.
Das ganze ist nicht wirklich schwer und mit ein paar Zeilen zu bewältigen, und da ist mein Python-Code wahrscheinlich nichtmal perfekt.

So sieht das ganze also aus:

Code: Alles auswählen

#txt = raw_input("Eingabe: ")
txt = "MEERRETTICH _ 12345 _ alles _ klein"
res = ""
for i in range(len(txt)):
    if txt[i].isalpha():
        if i % 2 == 0:
            res += txt[i].upper()
        else:
            res += txt[i].lower()
    else:
        res += txt[i]
    
print(res)
Ergebnis:

Code: Alles auswählen

MeErReTtIcH _ 12345 _ AlLeS _ KlEiN
sieht doch mal gut aus :) da hat der Python Kurs doch sehr viel gebracht.

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

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von Bulli » Mo Jul 07, 2014 10:10 am

Scheinbar habe ich meinen halbwegs funktionierenden Code überschrieben bei meinen "Versuchen".

Zur Zeit habe ich folgenden Code, welcher ziemlich schwachsinnig ist.
Ich arbeite gerade daran es wieder auf voriges Niveau zu bringen

Code: Alles auswählen

int main(void)
{

   int i = 1;
   char c;
   char str[50];

    printf("Geben Sie bitte einen beliebigen Text ein mit bis zu 50 Buchstaben ein!\n");
    scanf("%s",&str);

   for (str[i]; i<50; i++)
   {
      putchar(toupper(str[i]));
      i++;
   }

   return(0);
}
Ich hatte nämlich gedacht - da ich es nicht hinkriege mit den if-Abfragen, dass ich eventuell erstmal alle gegebenen Zeichen in Großbuchstaben formatiere und danach jeden 2ten Buchstaben mit tolower in Kleinbuchstaben - als alternativen Lösungsweg.

Natürlich bin ich noch meilenweit davon entfernt aber nein, ich verlange von niemandem meine "Hausaufgaben" zu übernehmen.
In der Prüfung stehe ich nämlich dämlich da :)


EDIT dani93: Code-Tags

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

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von oenone » Mo Jul 07, 2014 10:22 am

Tipp: Die Länge des eingegebenen Strings bekommst du durch strlen(str). Dann bekommst du keinen Müll nach dem letzten Zeichen ausgegeben.

Ansonsten musst du nur noch in der Schleife den putchar-Aufruf durch die entsprechende Ersetzung tauschen.Du kannst die einzelnen Zeichen auch direkt zuweisen: str = toupper(str); natürlich nur für die entsprechenden Fälle.

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 11:28 am

Ich gebe dir ein Tipp: der Modulo-Operator %

also z.B. i sei die Position

Wenn i gerade ist wird 0 = False zurückgegeben wenn i ungerade ist dann der Rest und in C ist alles was größer 0 ist == True

Code: Alles auswählen

if(i % 2)
  toupper(c[i]);
nouseforname seine Lösung ist mehr C als Python also wird es nicht schwer sein die nachzuprogrammieren.
Unwissenheit ist ein Segen

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

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von nouseforname » Mo Jul 07, 2014 12:10 pm

canlot hat geschrieben:
nouseforname seine Lösung ist mehr C als Python also wird es nicht schwer sein die nachzuprogrammieren.
Deswegen dachte ich ja es könnte ihm eine grosse Hilfe sein, da er fast genau das Gleiche umsetzen kann ;)

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

Re: Wortspiel erstellen (toupper / tolower)

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

Dank eurer Hilfe, Internetrecherche und Schweißarbeit bin ich bislang bis hier gekommen:

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);
    }

    if (i%2)
    {
    toupper(Eingabe[i]);
    i++;
    }
    *Eingabe = Eingabe[i];


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


return(0);
}
Wobei ich das mit dem i%2 im Prinzip zwar verstehe, aber nicht ganz nachvollziehen kann... :(

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

Re: Wortspiel erstellen (toupper / tolower)

Beitrag von oenone » Mo Jul 07, 2014 12:58 pm

Das i sollte doch eigentlich die Zählvariable der for-loop sein, oder nicht?

Antworten