Zahlen und Ziffern ausgeben
-
Du liest zweimal ein. Beim ersten Mal mußt Du eine Zahl eingeben. Beim zweiten mal dann ein Wort.
-
Omg stimmt jetzt fällts mir auch auf -.-' ....ok wie könnte ich das umgehen ? würde es mit einer while(cin>>zahl || cin>>ausgeschrieben)Anweisung funktionieren?
Also es soll nur einmal eingelesen werden.LG
-
Oder kann man eine Entscheidungsfrage für cin nicht mit so einer Schleife lösen ?
-
Was genau willst du denn erreichen?
Wie soll die Variable "ausgeschrieben" gefüllt werden (vom Benutzer oder vom Programm)?Wenn du einfach den vector benutzen willst, dann
ausgeschrieben = ziffer[zahl];
(auch wenn die Variablenbenennung so nicht toll ist)
-
Naja ich will erreichen, dass wenn ich zb. 9 eingebe "neun" rausbekomm (was ja schon hinhaut) und wenn ich "neun" eingebe die 9 rausbekomm.... War das irgendwie klar? ^^
-
Naja ich will erreichen, dass wenn ich zb. 9 eingebe "neun" rausbekomm (was ja schon hinhaut) und wenn ich "neun" eingebe die 9 rausbekomm.... War das irgendwie klar? ^^
-
Habs hinbekommen, danke
-
Zum Abschluss vllt noch eine etwas schönere Version.
#include <iostream> #include <string> #include <vector> #include <sstream> #include <cctype> int main() { const unsigned anzahl_ziffern = 10; const std::string ziffern[anzahl_ziffern] = //besser wäre std::array. mich nervt aber die sinnlose Warnung. { "null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun" }; while(true) { std::cout << "\n\n(1) Zahl -> Ziffern\n" "(2) Ziffern -> Zahl\n" "Anderes: Beenden\n\n>> "; int wahl; std::cin >> wahl; switch(wahl) { case 1: { std::cout << "\nGeb ne Zahl ein: "; std::string zahl; //damit koennen wir deutlich groessere zahlen eingeben lassen std::cin >> zahl; for(unsigned i = 0; i < zahl.size(); ++i) if(std::isdigit(zahl[i])) std::cout << ziffern[zahl[i] - '0'] << ' '; //mit zahl[i] - '0' erhalten wir zb: '3' == 51, '0' == 48, 51-48 == 3, siehe ascii tabelle } break; case 2: { std::cout << "Ziffern in Worte eingeben (durch ' ' trennen): "; std::string ausgeschrieben; std::cin.ignore(1, '\n'); //das ENTER aus dem Puffer loeschen std::getline(std::cin, ausgeschrieben); //auch leerzeichen einlesen std::string ziffer; std::istringstream is(ausgeschrieben); while(is >> ziffer) //">>" ueberspringt fuer uns die leerzeichen for(unsigned i = 0; i < anzahl_ziffern; ++i) if(ziffern[i] == ziffer) std::cout << i; } break; default: return 0; } } }
-
Daumen runter für ein Array aus std::string
-
314159265358979 schrieb:
Daumen runter für ein Array aus std::string
Was schlägst du vor?
-
Incocnito schrieb:
Zum Abschluss vllt noch eine etwas schönere Version.
[...]
Zeile 29 ist überflüssig, da der Vektor nicht benutzt wird. Die modulo - Funktion in Zeile 32 ist auch übrig, da zahl[i] immer nur eine einzige Ziffer darstellt.
-
redlight schrieb:
Was schlägst du vor?
char const*
-
314159265358979 schrieb:
Daumen runter für ein Array aus std::string
wie wäre es statt Daumen runter mit einem konstruktiven Verbesserungsvorschlag - kann nicht jeder gleich C++11 von 0 auf 100
-
Als ob das was mit C++11 zu tun hätte.
-
314159265358979 schrieb:
redlight schrieb:
Was schlägst du vor?
char const*
ich hatte statt des Rückfalls in die Steinzeit eher eine einzeilige Initialisierung mit std::array im Sinn
-
Lustig,
der Code war vorher genau ohne all diese Fehler.
std::array hab ich dann zurueck zu nem "normalen" (jaja std::array ist ja eigentlich normal) array gemacht, weil ich unseren Anfänger mit dieser total sinnlosen Warnung nicht verunsichern wollte, er könnte ja denken das sei normalconst std::array<std::string, 10> ziffern = { "null", "eins", "zwei", "drei", "vier", "fuenf", "sechs", "sieben", "acht", "neun" };
d.cpp|15|Warnung: geschweifte Klammern fehlen um Initialisierung für »std::array<std::basic_string<char>, 10u>::value_type [10] {aka std::basic_string<char> [10]}« [-Wmissing-braces]|
Aber das ist ja ein bekannter Bug. Ich benutz std::array erst wieder, wenn diese blöde Warnung endlich mal weg ist.
Die restlichen Fehler sind nur Relikte vom Rumprobieren.
-
std::array würde ich hier nicht nehmen, weil es erfordert, die Größe anzugeben.
DAFÜR std::string STREICHEN!