Wortspiel erstellen (toupper / tolower)
Wortspiel erstellen (toupper / tolower)
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!
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!
- 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)
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.

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!
-
- Beiträge: 236
- Registriert: Do Feb 10, 2011 6:31 pm
Re: Wortspiel erstellen (toupper / tolower)
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:
Ergebnis:
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)
Code: Alles auswählen
MeErReTtIcH _ 12345 _ AlLeS _ KlEiN
Re: Wortspiel erstellen (toupper / tolower)
sieht doch mal gut ausnouseforname 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:Ergebnis: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)
Code: Alles auswählen
MeErReTtIcH _ 12345 _ AlLeS _ KlEiN

Re: Wortspiel erstellen (toupper / tolower)
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
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
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);
}
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
Re: Wortspiel erstellen (toupper / tolower)
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.
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.
Re: Wortspiel erstellen (toupper / tolower)
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
nouseforname seine Lösung ist mehr C als Python also wird es nicht schwer sein die nachzuprogrammieren.
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]);
Unwissenheit ist ein Segen
-
- Beiträge: 236
- Registriert: Do Feb 10, 2011 6:31 pm
Re: Wortspiel erstellen (toupper / tolower)
Deswegen dachte ich ja es könnte ihm eine grosse Hilfe sein, da er fast genau das Gleiche umsetzen kanncanlot hat geschrieben:
nouseforname seine Lösung ist mehr C als Python also wird es nicht schwer sein die nachzuprogrammieren.

Re: Wortspiel erstellen (toupper / tolower)
Dank eurer Hilfe, Internetrecherche und Schweißarbeit bin ich bislang bis hier gekommen:
Wobei ich das mit dem i%2 im Prinzip zwar verstehe, aber nicht ganz nachvollziehen kann... 
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);
}

Re: Wortspiel erstellen (toupper / tolower)
Das i sollte doch eigentlich die Zählvariable der for-loop sein, oder nicht?