*HELP*C++ Programmierung

Austin.D.Powers

Commander
Mitglied seit
28.12.2003
Beiträge
179
Renomée
0
Standort
Syke
hi leute,
ich hab ein großes problem. ich schreiben morgen eine clausur in algorithmen.
dort sollen wir ein programm mit c++ schreiben, dass eingegebene bustaben umwandelt.

die großbustaben in kleinbustaben und die kleinbustaben in großbustaben!!!

wir haben bisher nur mit dem consolenexperten gearbeitet !

ich hab überhaupt keine idee...mist! irgendwie mit dem ascii code ?
könnt ihr mir nicht helfen?
*rose* *rose*

mfg
Austin.D.Powers
 
Hmm ... einfach den Buchstaben in einen int casten und X draufaddieren bzw. abziehen (musste mal in der ASCII-Tabelle schauen wieviele Buchstaben dazwischen hängen - X ist die Zahl der Buchstaben dazwischen, nen bissle blöd erklärt aber ich denke du verstehst was ich meine) und anschließend den int wieder in einen char casten. Bin mir nämlich gerade nicht sicher, ob es entsprechende Routinen wie upper- und lower-case für chars in c++ gibt.

Funktioniert natürlich nur mit dem standard 256-Zeichen ASCII-Satz aber das dürfte dich bei einer Consolen-Anwendung nicht wirklich interessieren ... also wenn es ein DOS-Programm ist.
 
:]

if( (xyz>='a')&&(xyz<='z') ) ...;
if( (xyz>='A')&&(xyz<='Z') ) ...;
if(xyz == 'ä')...;
if(xyz == 'Ä')...;
if(xyz == 'ö')...;
if(xyz == 'Ö')...;
if(xyz == 'ü')...;
if(xyz == 'Ü')...;
 
@i_hasser
Des ist wirklich ein bisschen umständlich... :)

SuperCow
 
Wenn du keine Umlaute willst, brauchst du nur die 1. beiden Zeilen. Die Umlaute stehen afaik nicht direkt hintereinander, wesswegen es da nur so geht.

Allerdings sollte man das natürlich noch passend verpacken, damit die beiden Ifs nicht hintereinander ausgeführt werden. Sonst löst sich der Algorithmus wie Materie und Antimaterie in nix auf ;D.
 
McTristan hats schon richtig beschrieben - schau dir einfach mal die ASCII Tabelle an.
Wenn ich mich recht errinere musstest du 0x20 addieren bzw. subtrahieren.
 
@i_hasser:

Weiß nicht genau worauf du hinaus willst aber er will doch die Buchstaben in die jeweils andere Variante umwandeln (also von klein auf groß und anders herum). Deine if-Abfragen sind ja schön und toll aber damit hab ich noch lange keinen Buchstaben umgewandelt sondern allerhöchstens abgefragt ob ein Buchstabe eingegeben wurde.

Algorithmus würde ich das erst gar nicht nennen ;)

Klar kannst du jetzt jeden Buchstaben überprüfen aber ich hab mir mal die Mühe gemacht etwas in meinen uralten Unterlagen zu kramen.

Wenn du nicht subtrahieren und addieren magst, binde einfach die ctype-library von C++ ein - dann hast du alle char-Sachen ohne das du sie selbst programmieren muss.

Beispiel (C++) - wenn du es in C brauchst sieht es ein klein wenig anders aus:

Code:
#include <cctype>

[...]

char c;

if (isupper (c)) 
{
 c = tolower (c);
}
else
{
  c = toupper (c);
}

[...]

mit "isalpha (c)" kannst du noch überprüfen ob es sich um einen Buchstaben handelt ... Musst du eine ganze Zeichenkette umwandeln machst du das bspw. in einer While-Schleife oder eben mit den standard-String-Funktionen.
 
i_hassers Lösungsansatz ist doch soweit ganz gut. Er wollte wohl keinen komplett fertigen Code hier reinsetzen, weil da das "Nachdenk"-Feature im Hirn sich meist abschaltet.

und btw: dein Code kommt nicht mit den Umlauten klar, die werden von der C-Bibliothek ignoriert ;)
 
Aber die Umlaute kann man ja noch extra ausklammern.

Mit "if bla >= 'A' " machst du jedenfalls keinen Buchstaben groß und ich hab bereits in meinem ersten Posting eine Lösung erklärt die ohne die Library funktioniert ;)

i_hasser scheint darauf hinaus zu wollen jeden der 26 Buchstaben (+ Umlaute) in jeweils 2 Kombinationen zu überprüfen und entsprechend den Buchstaben zu setzen. Das ist aber alles andere als sinnvoll.
Mit der Abfrage "if( (xyz>='a')&&(xyz<='z') )" hat er ja nur geschaut wo sich xyz "befindet", ohne zu wissen was dann mit xyz passieren soll macht das IMHO keinen Sinn. Oder anders ausgedrückt: Der Threadersteller wird, wenn er die Library nicht benutzt wohl eine Kombination aus if-Anweisungen und casten->addieren/subtrahieren->casten brauchen.
Wobei casten hier für Dinge wie: n = (int) c steht - wobei c vom typ char ist und n ein int.
 
vielen dank für eure antworten...
ich glaub, ich kann damit etwas anfangen.
ich sitz hier gerade in der schule und schreib die arbeit in der 3-4 stunde! 8)
ich glaub ich bin gerettet...thx

mfg
Austin.D.Powers
 
Ging mir gerade um dieses Nachdenken. Das ist kein fertiger Alg, das sollte ja wohl jedem auf den ersten Blick klar sein... so könnte das fertig aussehen:

PHP:
void swapChar(char* a)
{
    if( (*a>='a')&&(*a<='z') ) 
    {
        *a+='A'-'a';
        return;
    }

    if( (*a>='A')&&(*a<='Z') ) 
    {
        *a+='a'-'A';
        return;
    }

    // restliche ifs für umlaute, falls erforderlich

}


int main()
{
    char* text="Das ist ein Text, dessen Groß/Kleinschreibung geändert werden soll.";
    
    int i;
    for(i=0;text[i]!=0;i++) swapChar(&text[i]);

    return;
}

Es war wohl kaum die Aufgabe, dafür die C Lib zu bemühen.
 
Was die Aufgabe genau war weiß ich auch nicht aber zu irgendetwas sind die Standardlibraries ja schließlich da *suspect*

Sorry aber ich hätte mit den einzelnen if-Anweisungen nicht viel anfangen können wenn du nicht einmal erklärst worauf du hinaus möchtest. Das was du zuletzt geschrieben hast ergibt ja schon mehr Sinn aber das hättest du auch einfach so schreiben können oder? Nicht jeder hier programmiert sein halbes Leben lang ;) Oder willst du mir erklären er wäre von alleine auf 'A'-'a' gekommen? Ja, ja ich weiß du hast es ja auch erwähnt aber mal ehrlich, könntest du mit einer Aussage "'A'-'a'" etwas anfangen wenn du sie nicht im Kontext siehst?
 
Es sollten ja auch eher Denkanstöße sein.

'A'-'a' war als Antwort auf die Differenz zwischen Groß- und Kleinbuchstaben gedacht, die braucht man nämlich garnet wissen. In C sind Buchstaben nunmal chars, also 1Byte Variablen.

Und die IFs...

Wenn Großbuchstabe, dann...
Wenn Kleinbuchstabe, dann...

So sollte ja ein Gerüst zu dem Alg aussehen. Das Problem ist, dass man das Prog das ich gepostet hab, so 1:1 übernehmen kann, ohne die eigenen Grauen Zellen anzustrengen.
 
McTristan schrieb:
aus diesem Posting
könntest du mit einer Aussage "'A'-'a'" etwas anfangen wenn du sie nicht im Kontext siehst?

'A'- 'a' gibt doch einfach nur die Differenz der Positionen im Ascii Code an die zwischen einem Gross- und einem Kleinbuchstaben stehen.
Der riesen Vorteil liegt m.E. darin, dass man die Ascii Tabelle nicht kennen muss, sondern nur wissen muss ob zuerst die Gross oder die Kleinbuchstaben kommen.

der ' ' Befehl ist doch relativ Grundlegend, oder nicht?


EDIT: Zu spät :P
 
Nichtmal das ;D. Es ist wie bei der Vektorrechnung, um den Vektor von A nach B zu bekommen, muss man Ziel-Quelle Rechnen.

Will man also von Klein- zu Großbuchstaben, rechnet man Großbuchstabe - Kleinbuchstabe, ansonsten umgekehrt. Chars können auch negativ sein, selbst wenn sie unsigned sind. Das signed/unsigned bezieht sich nur auf Multiplikation, Division und Zeichenausgabe. Bei Addition/Subtraktion ist es egal, ob signed oder unsigned.
 
*grummel*
Man Leute es ging hier nicht um mich sondern um einen Null-8-Fünfzehn-Ich-muss-mal-eben-für-den-Info-Unterricht-eine-Aufgabe-lösen Menschen und der will es vielleicht auch einfach erklärt bekommen.
Wenn du ihm 'A'-'a' vorsetzt weiß er mit an 100% angrenzender Wahrscheinlichkeit nichts damit anzufangen. Deshalb hab ich es anschaulich erklärt.
Klar ist die (End)Version von i_hasser besser aber damit hat oben genannter Usertyp evtl. so seine Probleme.
 
McTristan schrieb:
aus diesem Posting
aber damit hat oben genannter Usertyp evtl. so seine Probleme.

Gedankenleser, was ;D
Könntest Dich mit meiner Freundin zusammentun, die glaubt auch immer zu wissen was ich denke :P

Wenn ich mich recht errinere musstest du 0x20 addieren bzw. subtrahieren.

antwort darauf von I_hasser:

'A'-'a'

Ich weiss nicht was daran so schwierig ist *noahnung*
Jemanden einfach einen fertigen Algo geben bringt wirklich niemanden etwas.
Du hast einfach nicht die Idee von i_hasser verstanden ohne den kompletten Code zu sehen...
 
Ja bin in der Tat beruflich Gedankenleser, wenn auch keine Frau ;D

Nee mal im ernst, mir ging es bloß darum, dass erst etliche Postings nach 'A'-'a' erklärt wurde was man damit machen soll. Für dich und i_hasser sieht es so aus als wäre alles klar und das 'A'-'a' bezieht sich auf die Anzahl der Zeichen zwischen beiden Buchstaben, für andere vielleicht nicht.

Na ist ja auch egal - Gott hat dem Programmierer ja zum Glück Libraries mit vorgefertigten Funktionen an die Hand gelegt.
 
Von was zum teufel redet ihr überhaupt ?? Wenn ich das so lese wird mir ganz anders :D ich bin umgeben von lauter Cracks *lol*
Meine Freundin lernt gerade C++ für ihr Techniker Studium und tuht sich nicht gerade leicht dabei :/ Dachte ich werfe mal nen Blick hier rein aber ganz ehrlich wie lange muss man proggen um sowas zu checken ? *noahnung* Man ist das alles interessant was für n Buch issn da so zu empfehlen (ich meine für einen richtigen Neulandseinsteiger) ??
 
Zurück
Oben Unten