const char* to char
-
#include <iostream>
using namespace std;
int main(){
int zahl;
int a[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
int b[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
int c[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
int d[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};cout << "Bitte geben Sie eine vierstellige Zahl ein ";
cin >> zahl;
a=zahl/1000;
b1=zahl/100;
b=b1%10;
c1=zahl/10;
c=c1%10;
d=zahl%10;cout << "Die Zahl lautet " << a[10] << b[10] << c[10] << d[10];
cout << endl;
return 0;}
Sind sicher eine Menge Fehler drin, ich hoffe ihr könnt mir helfen, bin noch recht neu und komm nicht so ganz mit.
Danke
-
Du versuchst integers einen Text zuzuweisen. Das kann nicht funktionieren. Wenn schon dann so:
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };Aber ich weiss nicht so recht was Du mit dem Code so erreichen willst und was die ganzen Rechenoperationen sollen auf den ZEIGERN! der Arrays.
Für cout brauchst Du die Zahlen nicht konvertieren. Das wird automatisch gemacht von der Klasse und deren operatoren.std::cout << "Hello World! Meine Nummer ist " << 78951707 << std::endl;Das ist gültig und funktioniert.
rya.
-
#include <iostream> using namespace std; int main() { int zahlentexte[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"}; cout << "Bitte geben Sie eine vierstellige Zahl ein "; int zahl; cin >> zahl; int a=zahl/1000; int b1=zahl/100; int b=b1%10; int c1=zahl/10; int c=c1%10; int d=zahl%10; cout << "Die Zahl lautet "; cout<<zahlentexte[a]<<'-'; cout<<zahlentexte[b]<<'-'; cout<<zahlentexte[c]<<'-'; cout<<zahlentexte[d]<<'\n'; return 0; }
-
Danke für die Antworten.
Was ich erreichen will ist, dass man zB eine 6 stellige Zahl eingibt und man dann als Ausgabe die Zahl in Buchstaben bekommt: zB die Zahl 123456 soll dann als Ausgabe stehen: eins, zwei, drei, vier, fünf, sechs.
-
(fast) genau das macht volkards code doch, wenn du aus dem falschen int nen (const) char* bzw (const) char[]
dann guckst du dir noch an, was dort gerechnet wird und kommst vll auf die idee, dass es auch in C++ schleifen gibt...bb
-
Das (const) char* nimmt doch einen fixen Wert aus dem Speicher, hab das mal gestern probiert und er hat egal bei welcher Eingabe auch immer, immer wieder den gleichen Wert ausgegeben.
-
const heißt eben konstant. Also ändert es sich nicht.
Du möchtest erstmal deine Zeilenint a[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"}; ...in eine einzige Zeile
const char textzahlen[]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};ändern. const char[] deshalb, weil sich die Zahlen 0 bis 9 als Text niemals ändern werden.
Danach dann
printf("Die Zahl lautet %s, %s, %s, %s\n", textzahlen[a], textzahlen[b], textzahlen[c], textzahlen[d]); //oder cout << "Die Zahl lautet " << textzahlen[a] << textzahlen[b] << textzahlen[c] << textzahlen[d];Zur Erklärung: textzahlen ist ein Array (=Feld) von Strings, textzahlen[0] ist der erste String "null", textzahlen[1](="eins") der zweite usw. Durch die Anordnung kannst du direkt mit textzahlen[meineZahlAlsInt] die entsprechende Zahl als Text bekommen.
-
so schwer kann das doch gar nicht sein...
const char textzahlen[]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};ein array aus zeichen?!
nein...
ein array aus einem array aus zeichen:const char* textzahlen[]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"}; //oder const char* textzahlen[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};bb
-
so geht es auch
const char textzahlen[][sizeof "sieben"]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"};
-
camper schrieb:
[sizeof "sieben"]Gut das der Compiler deutsch kann und weiß, dass sizeof "sieben" 7 ist.
-
Super danke euch.
-
ich find das insgesamt ziemlich umständlich.
Wenn ich das richtig verstehe, soll jemand z.B. 125894 eingeben und "eins, zwei, fünf, acht, neun, vier" erhalten, oder?
da liegt doch die verwendung von switch und einer for-schleife nahe, oder nicht?
int input [6], x; cout << "Zahl eingeben (sechsstellig)" << endl; cin.getline (input, 6); for (x = 0 ; x < 6 ; x++) { switch (input[x]) { case 0: cout << "null "; break; case 1: cout << "eins "; break; case 2: cout << "zwei "; break; case 3: cout << "drei " break; case 4: cout << "vier "; break; cse 5: cout << "fünf "; break; case 6: cout << "sechs "; break; case 7: cout << "sieben "; break; case 8: cout << "acht "; break; case 9: cout << "neun "; break; } } cout << endl;
-
geht mit nem array mind. genau so schön und ist wesentlich schneller : P
-
du hast recht, es ist schlechter für die performance, aber ich fand den gedankengang mit den hilfsvariablen irgendwie mühseelig.
Und solange das das einzige ist, was das programm machen soll, dürfte das keinen pc zu sehr beanspruchen, oder doch?
-
kARRE schrieb:
ich find das insgesamt ziemlich umständlich.
direkter vergleich
int input [6], x; cout << "Zahl eingeben (sechsstellig)" << endl; cin.getline (input, 6); for (x = 0 ; x < 6 ; x++) { switch (input[x]) { case 0: cout << "null "; break; case 1: cout << "eins "; break; case 2: cout << "zwei "; break; case 3: cout << "drei " break; case 4: cout << "vier "; break; cse 5: cout << "fünf "; break; case 6: cout << "sechs "; break; case 7: cout << "sieben "; break; case 8: cout << "acht "; break; case 9: cout << "neun "; break; } } cout << endl;int input [6], x; cout << "Zahl eingeben (sechsstellig)" << endl; cin.getline (input, 6); for (x = 0 ; x < 6 ; x++) { static const char* textzahlen[10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun"}; if(0<=input[x] && input[x]<=9) cout<<textzahlen[input[x]]; } cout << endl;
-
der hauptgrund war eigtl nicht die performance sondern eher die Hässlichkeit ;P
Guck mal, geht für jede positive Zahl:
mit 3 Zeilen mehr so gar für jede (ganze) Zahl
und wenn man dann noch will, kann man für noch 3 Zeilen mehr auch noch für alle anderen zahlen machenvoid print_to_cout(unsigned int value) { static const char* zahlen = {"null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun"}; if(i == 0) return; unsigned int these = value%10; print_to_cout(value/10); std::cout << zahlen[these] << " "; } int main() { unsigned int i; std::cin >> i; print_to_cout(i); }bb