Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu Ascii-codes????????

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
23.02.2004, 17:12 Uhr
~Cebinem
Gast


Hallo!!!
Ich möchte ein einfaches Programm (Konsolenanwendung) machen, dass testet ob ein bestimmtes Wort richtig eingegeben wurden ist.

Beispiel:

C++:
char IBuchstabe = H,h;
char IIBuchstabe = A,a;
char IIIBuchstabe = U,u;
char IVBuchstabe = S,s;
cout << "Bitte geben sie das Wort "Haus" ein." << endl;
cin >> IBuchstabe
cin >> IIBuchstabe
cin >> IIIBuchstabe
cin >> IVBuchstabe
// dann mit if und else
// am Ende return 0;



Nun meine Frage:
Mir ist ja bekannt das ein Programm nur mit Zahlen rechnet und nicht mit Buchstaben. Wie mache ich es dann, dass das Programm auch Zeichen und Buchstaben erkennt? Kann ich mit den ASCII-Codes bestimmten Buchstaben/Zeichen einen Wert (Zahl) zuweisen oder geht es auch anders?
Ich hab mal gelesen, dass die Wertvergabe von ASCII-Codes (also die Zahl, die an einen Buchstaben/Zeichen vergeben wird) rein zufällig ist, stimmt das oder kann ich das irgendwie beeinflussen?
Noch eine Frage: Hab ich bei dem Quellcode irgendwas falsch gemacht? Ist

C++:
char


falsch oder etwas anderes?

DANKE schon mal im vorraus für alle Antworten und Tipps!!!!!!!!!!!!!

MFG
Cebinem
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.02.2004, 17:23 Uhr
typecast
aka loddab
(Operator)


Also die Zuweisung der ASCII Codes ist natürlich nicht zufällig hier kannst du dir die Tabelle anschauen.
Zu deinem Code:

C++:
char IBuchstabe = H,h;


ist nicht erlaubt.
Du musst eine Zuweisung mit

C++:
char foo='a';


oder so ähnlich machen. Zahlen kannst du auch in char als Buchstabe speichern

C++:
char bar='1';


Und jetzt noch mal zu deinem oberen Beispiel:

C++:
#include <string>
#include <iostream>
int main()
{
std::cout << "Bitte geben Sie das Wort \"Haus\" ein:" << endl;
std::string foobar;
std::cin >> foobar;
if (foobar == "Haus")
  std::cout << "Richtig :-)" << endl;
}


Erstens wie schon gesagt ist die Zuweisung nicht richtig. Dann gilt in Strings musst du das Zeichen " durch \" ersetzten. Außerdem kannst du ganz elegant mir strings arbeiten
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)

Dieser Post wurde am 23.02.2004 um 17:24 Uhr von loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.02.2004, 17:25 Uhr
Pablo
Supertux
(Operator)


char ist schon das ASCII Code


Code:
char x='a';
std::cout << "Das Zeichen ist: " << x << " und der ASCII-Code: " << (int) x << std::end;


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.02.2004, 18:29 Uhr
~Cebinem
Gast


An loddab:
VIELEN VIELEN DANK für deine schnelle Antwort!!!!!!!!!!!!!!!
Aber leider versteh ich manches noch nicht richtig (bin noch Anfänger). Du hast doch

C++:
"Haus"


nicht deklariert oder hast du nicht den ganzen Quellcode aufgeschrieben?
Wenn ich das richtig verstanden habe ist

C++:
foo


für Buchstaben und

C++:
bar


für Zahlen, oder?
Muss ich nach dem Zuweisungoperator ( = ) das ' vor und nach die/den Zahl/Buchstaben setzen?
Kann ich auch statt

C++:
::std::cout // oder ::std::cin




C++:
using namespace std;


nehmen?

Und noch eine Frage:
Wie kann ich denn den ASCII-Code deklarieren oder definieren, also das Programm soll prüfen ob das Wort "Haus" mit den ASCII-Code Zahlen übereinstimmt.

Beispiel:

C++:
// Vorher alles korrekt eingegeben
// bei der Auswertung
if (foobar == 7297117115) /* die Zahlen stehen hierbei für die einzelnen Buchstaben, H = 72, a = 97, u = 117 und s = 115. */


nun meine Frage: Ist dies gültig oder geht das so nicht? Wie kann man festlegen, dass z. B.: H = 72 ist und nicht 729 (siehe oben) oder u = 117 und nicht 11 oder 117115 ist (siehe ebenfalls oben)?

Ich hoffe ihr versteht meine Fragen und könnt mir noch helfen.
DANKE schon im vorraus!!!!!!!!!!!!!!!!!

PS: DANKE auch an Pablo!!!

MFG
Cebinem

Dieser Post wurde am 23.02.2004 um 18:32 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.02.2004, 18:51 Uhr
Pablo
Supertux
(Operator)


Nein, nicht so schnell.

1. "Haus" ist ein Teil des Textes an std::cout geschickt wid.
In C/C++ benutzt man ", um Zeichenketten zu bezeichnen. Das Problem ist, wie kann ich auf den Bildschirm das Zeichen " drucken, wenn " ein reserviertes Zeichen ist? Dafür gibt es eine Lösung. Es gibt manche Zeichen, die reserviert sind, d.h. man kann sie nicht einfach so benutzen, aber wenn man das Zeichen \ davor steht, sind sie normale Zeichen, deshalb hat mike \"Hallo\" geschrieben, damit, "Hallo" (mit Einführungszeichen) auf den Bildschirm kommt.

Also bekommst du beim Ausführen: Bitte geben Sie das Wort "Haus" ein:
using namespace std;
2. Nein, foo und bar sind beide verschiedene Variablen. In C gibt es Zeichen. Und die bestehen nur aus einem Buchstabe. Ein einziges Zeichen weist man mit ' ' zu, d.h. "a" ist ein Zeichenkette, 'a' ist nur ein Zeichen.

Jedes Zeichen, das du siehst, es sein ein Buchstabe oder ein Zahl, oder z.b. ?-Zeichen, alle haben einen Code. Und das ist der ASCII-Code. Wenn du sowas hast wie x=1; bedeutet, dass zu den arithmetischen 1 der Variable x zuweist. Aber x='1'; heißt, dass du das Zeichen 1, als Zeichen, der Variable x zuweist. Man könnte das auch so sagen. Ich weise der Variable x den ASCII Code des Zeichens '1' zu.

Zeichen sind von typ char, man kann mit dem casting (int) in den Code umwandeln, wie ich oben gemacht habe. Weil char im Prinzip w ein int ist, welches kein Vorzeichen hat und viel wenige Werte annhemen kann.

3. Bzgl using namespace std;
ja

4.

C++:
if (foobar == 7297117115)


Das ist komplett falsch. Eine Zeichenkette ist ein Array von mehrern chars, d.h. du müsstest Zeichen für Zeichen vergelichen.

C++:
if (foobar[0]=='H' && foobar[1]=='a' && foobar[2]=='u' && foobar[3]=='s' && foobar[4]=='\0')


Aber dafür gibt es Funktionen in der Standardliberieren.
In C:

C++:
#include <stdio.h>
#include <string.h>
int main()
{
    char* x= "Haus";
    if (strcmp(x, "Haus")==0) printf("Ja, x enthält das Wort Haus\n");
    else printf("Nein, x enthält nicht das Wort Haus\n");
    return 0;
}



In C++
da kannst du die Klasse string benutzen, das macht die Sachen viel einfacher

C++:
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string x = "Haus";
    if(x=="Haus") cout << "Ja, x enthält das Wort Haus" << endl;
    else cout << "Nein, x enthält nicht das Wort Haus" << endl;
        
    return 0;
}


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.02.2004, 21:46 Uhr
~Cebinem
Gast


An Pablo:
DANKE für deine ausführliche Beschreibung!!!!!!!!!!!!!!!!!
Ich glaub ich hab das jetzt verstanden. Aber eins noch:
Ich hab ja verstanden, dass man " durch \" im string ersetzen muss, aber wie wurde "Haus" in den Text eingebunden? Ich versteh nicht ganz wann man
C++:
std::cout << // oder std::cin >>



benutzen muss und wann nur

C++:
cout << // bzw. cin >>



Und mit dem Umwandeln von char in int hab ich nicht ganz verstanden, warum und wie man das macht?

DANKE nochmals für alle Hinweise und Antworten!!!!!!!!!!!!!!!

MFG
Cebinem
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.02.2004, 22:13 Uhr
Pablo
Supertux
(Operator)


Deine erste Frage habe ich nicht mehr verstanden. "Haus" ist ein Text, keine Variablen. Und damit die Einführungszeichen gedruckt werden und der Compiler die Zeichen " nicht als Ende des Textes versteht, muss man \" schreiben. Stell dir vor \" wäre ein eigenes Zeichen.

2. In C++ gibt es Namensbereiche (Namespaces). Die Idee von den Namensvereiche ist, dass man manche Funktionen, Variablen, Datenstrukturen, Klassen usw. unter einem Bereich definieren kann. Es kann passieren, dass man in 2 verschiedenen Bibliotheken den selben Namen für eine Funktion braucht, z.b. print. Stell dir vor, es gibt den Namensbereich wuerfel und karte. Und in wuerfel gibt es Klassen und Funktionen, die Würfel dartsellen, in karte Klassen und Funktionen für Karten.

Nun, ich will, dass es für Karten und Würfel eine Funktion namens print gibt, die die gewürfelte Augenzahl druckt bzw. die gespielte Karte.


C++:
print();



Der Kompiler könnte jetzt nicht mehr entscheiden, welche print() Funktion gemeint ist.

C++:
wuerfel::print();
karte::print();



macht das leichter, denn die erste Funktion ist die von wuerfel.


C++:
std::cout


heißt im Grunde, benutze das Obejkt cout des Namensbereiches std

Die Standardobjekte, Standardklassen, usw. befinden sich im Namespace std. Deshlab std::cout. Wenn du using namespace benutzt, so kann der Compiler wissen, wenn ich cout niergends finde, dan suche in std.
Man benutzet std:: wenn man nicht using namspace std; hat.

3. Du kannst Datentypen unwandeln, z.b. int --> double usw.
Das macht man mittels casting. Casting macht man mit (datentyp).


C++:
typ1 x;
typ2 y;



Wenn man in der Lage ist, typ1 in typ2 bzw. typ2 in typ1 umzuwandeln, kann man folgendes tun:

C++:
x = (typ1) y;
// bzw
y = (typ2) x;


Das heißt, weise der Variable x den Wert y als wäre es ein typ1 Wert zu.

Das heißt Casting. Du musst wissen, dass du dabei Information verlieren kannst, vor allem, wenn du von etwas größerem zu etwas kleinerem umwandelst. Bsp: von float zu int.

C++:
float pi=3.1415;
int int_wert_von_pi = (int) pi;


int_wert_von_pi ist in diesem Fall 3. Die ganze Nachkommastellen-Information ist dabei verloren gegangen, weil float sozu. größer als int ist.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
25.02.2004, 20:59 Uhr
~Cebinem
Gast


An Pablo:
DANKE erstmal für deine vielen Hilfen!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Jetzt hab ich das auch mit dem Umwandeln verstanden!
Stimmt, meine 1. Frage war nicht richtig gestellt!!! Ich wollte eigentlich wissen, wie das

C++:
if // siehe oben bei der Klasse string


weiß, ob das Wort "Haus" richtig eingegeben wurden ist, aber ich habs mir nochmal angesehen und glaube, dass die Klasse string (wie du oben beschrieben hast) dies prüft.
Falls ich mit string was falsch verstanden hab, kannst du mir das ja vielleicht nochmal erklären!

DANKE schon mal im vorraus!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MFG
Cebinem
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
25.02.2004, 21:05 Uhr
Pablo
Supertux
(Operator)


Ich weiß nicht, wie du es verstanden hast, ich kann nicht deine Gedanke lesen

Es ist auch schwierig zu erklären, denn ich weiß nicht, was du willst bzw. ob du mit C oder C++ programmieren willst. Unter C gibt keine Klassen und das bedeutet, die Klasse String ist auch nicht enthalten, und die Handhabung von C-Strings (ich meine von char[] oder char*, usw) ist einfach, aber es kostet ein bisschen Zeit und viel Übung, bis man es endlich kappiert hat. Die Schwierigkeit liegt eigentlich darin, das man nicht so richtig den Unterschied zwischen Arrays und Pointers verstehen kann, und viele Fehler deshlab gemacht werden. Aber wenn man das prinzip verstanden hab und die Funktionen der Standardlibrary kennt, steht nichts mehr im Weg.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
26.02.2004, 07:49 Uhr
~Cebinem
Gast


Hi!!!
Also ich programmiere nur in C++ und da gibt es ja Klassen. Liegt es an der Klasse, dass das Wort "Haus" auf Richtigkeit überprüft wird?

DANKE für alle Hinweise!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

MFG
Cebinem
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: