Zeichen klassifizieren
-
Hey Leute, ich habe eine Aufgabe : "Schreiben Sie ein Programm, das ein einzelnes Zeichen einliest und klassifiziert. Es soll ausgeben, ob es sich um ein Alphazeichen, ein Ziffernzeichen oder ein sonstiges Zeichen handelt. Die Menge der Alphazeichen ist {a..z, A..Z}, die Menge der Ziffernzeichen ist {0..9}. Alle übrigen Zeichen gehören zur Menge der sonstigen Zeichen."
Beispieldialoge
Dialog 1
Zeichen:
? <RETURN>
sonstiges Zeichen
Dialog 2Zeichen:
1 <RETURN>
Ziffernzeichen
Dialog 3Zeichen:
x <RETURN>
AlphazeichenDas habe ich versucht zusammenzuschreiben, es macht nicht das was es soll

#include <cstdlib> #include <iostream> #include <stdio.h> #include <ctype.h> using namespace std; int main() { char a; cout << "Geben Sie ein Zeichen ein:"; cin >> a; if (!isalnum(a)); printf("Alphanumerisches Zeichen : %c",a ); a = isalpha(a); printf ( "Buchstabe: %c", a); a = isdigit (a); printf ("Sonderzeichen: %c", a); system("PAUSE"); return 0; }Was muss ich daran ändern? Ich hoffe ihr könnt mir helfen.
-
Hallo Brain91,
dein Code enthält wirklich ein paar Fehler.
Du möchtest prüfen, ob das eingegebene Zeichen eine Zahl, ein Buchstabe oder ein Sonderzeichen ist. Nur wenn eines davon zutrifft, willst du auch nur den passenden Text ausgeben.#include <cstdlib> #include <iostream> #include <stdio.h> #include <ctype.h> using namespace std; int main() { char a; cout << "Geben Sie ein Zeichen ein:"; cin >> a; if (isdigit(a)) cout << "Alphanumerisches Zeichen : " << a << '\n'; else if(isalpha(a)) cout << "Buchstabe: " << a << '\n'; else cout << "Sonderzeichen: " << a << '\n'; system("PAUSE"); return 0; }Statt printf benutze lieber cout, wie du es am Anfang gemacht hast, da wir C++ coden.
Du siehst also, bei dem ersten if, wird der unten drunter stehende Text ausgegeben und nur dieser, wenn es eine Zahl ist. Wenn es ein Buchstabe ist, wird nur "Buchstabe: " ausgegeben und nichts anderes. Das gleiche bei dem Sonderzeichen.
Was bei dir also gefehlt hat, ist die Abfrage. Du hattest zwar eine, aber genau das war dein Problem. Du hattest nunmal nur eine. D.h., die anderen beiden wurden auch ausgeführt, ganz egal ob es ein Buchstabe ist oder nicht.
Außerdem gibt z.B. isdigit() den Typ bool zurück. Du versuchst aber das zurückgegebene bool einem char zuzuweißen. Das sollte man nicht machen. Am besten machst du es direkt in die Abfrage rein. Ein weiteres Problem bei dir war, dass du hinter der if-Abfrage ein Semikolon hattest. Egal ob die Abfrage true oder false ergibt, es wäre nichts passiert.
Ich hoffe du hast es verstanden. Wenn nicht, frag nach.
-
Hey FreakY<3Cpp, vielen dank für deine schnelle Antwort, jetzt habe ich auch verstanden, was ich falsch gemacht habe.
Könntest du mir vielleicht noch einen Tipp geben, welche Befehle man eingeben muss für (Schreiben Sie ein Programm, das ein Alphazeichen einliest. Ein Alphazeichen ist ein Zeichen aus der Menge {a..z, A..Z }. Handelt es sich um kein Alphazeichen, soll eine Fehlermeldung ausgegeben werden. Liegt ein Alphazeichen vor, wird angezeigt, ob es sich um einen Vokal, ein Element der Menge {a, e, i, o, u, A, E, I, O, U}, oder einen Konsonanten (Menge der Alphazeichen vermindert um die Menge der Vokale) handelt.)
Ich habe schon im Internet geschaut, aber finde dafür keine Befehle und in meinem Buch steht darüber auch nichts drin.
-
Schau dir dazu mal die switch-Anweisung an. Diese kann man für z.B. Integer und Char benutzen. Also in deinem Fall char. Die switch-Anweisung ähnelt der if-Anweisung. Der Link zeigt zwar ein C Beispiel, aber die Benutzung sollte verständlich sein. Du kannst ja erstmal versuchen selbst was hinzubekommen und wenn du nicht weiterkommst, fragst du wieder nach.
-
Also ich habe das jetzt so gemacht, aber das ist bestimmt zu lang oder?
Geht das auch irgendwie kürzer für die Aufgabe (Schreiben Sie ein Programm, das ein Alphazeichen einliest. Ein Alphazeichen ist ein Zeichen aus der Menge {a..z, A..Z }. Handelt es sich um kein Alphazeichen, soll eine Fehlermeldung ausgegeben werden. Liegt ein Alphazeichen vor, wird angezeigt, ob es sich um einen Vokal, ein Element der Menge {a, e, i, o, u, A, E, I, O, U}, oder einen Konsonanten (Menge der Alphazeichen vermindert um die Menge der Vokale) handelt.)?
Schonmal vielen Dank im vorraus.#include <cstdlib> #include <iostream> #include <stdio.h> #include <ctype.h> using namespace std; int main() { char a; cout << "Geben einen Buchstaben ein"; cin >> a; scanf("%b", & a); switch (a) { case 'A': case 'a': printf("\n true"); case 'E': case 'e': printf("\n true"); case 'I': case 'i': printf("\n true"); case 'O': case 'o': printf("\n true"); case 'U': case 'u': printf("\n true"); printf("\n Vokal"); break; case 'B': case 'b': printf("\n false"); case 'C': case 'c': printf ( "\n false"); case 'D': case 'd': printf ( "\n false"); case 'F': case 'f': printf ( "\n false"); case 'G': case 'g': printf ( "\n false"); case 'H': case 'h': printf ( "\n false"); case 'J': case 'j': printf ( "\n false"); case 'K': case 'L': printf ( "\n false"); case 'M': case 'm': printf ( "\n false"); case 'N': case 'n': printf ( "\n false"); case 'P': case 'p': printf ( "\n false"); case 'Q': case 'q': printf ( "\n false"); case 'R': case 'r': printf ( "\n false"); case 'S': case 's': printf ( "\n false"); case 'T': case 't': printf ( "\n false"); case 'V': case 'v': printf ( "\n false"); case 'W': case 'w': printf ( "\n false"); case 'X': case 'x': printf ( "\n false"); case 'Y': case 'y': printf ( "\n false"); case 'Z': case 'z': printf ( "\n false"); default: printf("\n kein Vokal"); break; } system("PAUSE"); return 0; }
-
Ja es geht definitiv kürzer. Das Prinzip der switch-Anweisung ist, dass es je nach Fall zu dem richtigen Punkt springt. Wenn kein break in einem case enthalten ist, fällt es einfach durch.
D.h., statt folgendes zu schreiben:switch(character) { case a: cout << character; break; case A: cout << character; break; default: cout << "kein a"; }kannst du das schreiben:
switch(character) { case a: case A: cout << character; break; default: cout << "kein a"; }Und beides wird somit zusammengefasst.
Und wie wir ja wissen: Wenn der Buchstabe kein Umlaut ist, ist es ein Konsonant. Da es weniger Umlaute als Konsonanten gibt, prüfen wir ob das Zeichen ein Umlaut ist und wenn nicht, benutzen wir default um zu sagen, dass es sich um ein Konsant hält.
Dein Code in kurz:#include <cstdlib> #include <iostream> #include <stdio.h> #include <ctype.h> using namespace std; int main() { char a; cout << "Geben einen Buchstaben ein"; cin >> a; if(isalpha(a)) { switch (a) { case 'A': case 'a': case 'E': case 'e': case 'I': case 'i': case 'O': case 'o': case 'U': case 'u': cout << "Es handelt sich um ein Vokal."; break; default: cout << "Es handelt sich um einen Konsonanten." } } else { cout << "Kein Buchstabe!"; } system("PAUSE"); return 0; }So, dann noch eine if-Abfrage eingebaut, um zu prüfen, ob es auch ein Buchstabe ist und dann läuft das Programm.
-
Vielen Dank für deine Hilfe