Eine gegebene ganze Zahl zerlegen und seine Ziffern in einem char-array speichern(Aber man weiß nicht die Länge der Zahl)
-
long nombre; long quadrat; cout<<"Geben Sie ein Zahlenstring ein: "<<endl; cin>>zahl; istringstream istr(zahl); if(istr>>nombre) // ich prüfe hier ob der String nur aus Ziffern besteht { stringstream buffer(zahl); buffer>>nombre; // ich gebe nombre die Zahl von String quadrat = nombre*nombre; // berechnung von quadrat cout<<"Quadrat der eingegebenen Zahl: "<<quadrat<<endl; long vIn = 0; // aber jetzt das Problem: wie kann ich eine vorher // unbekannte Zahl (hier quadrat) in Ziffern zerlegen // und die einzelnen Ziffern des Resultats in einem char- // array speichern? vector<char>array = (char)vIn;
-
Das Zahlenstring muss auch eine Maximal-Länge 5 haben.
-
Warum liest nicht gleich einen
long
voncin
?Wenn das Resultat
std::vector<char>
ok ist, dann iststd::string
sicher auch ok? std::to_string()
Warum willst Du überhaupt die Zahl in einem "Char Array" (welcher Form auch immer) haben?
-
@EBD Fang bei der 1er-Stelle der Zahl an und drehe am Ende den String(char-Array) um.
-
@EBD sagte in Eine gegebene ganze Zahl zerlegen und seine Ziffern in einem char-array speichern(Aber man weiß nicht die Länge der Zahl):
if(istr>>nombre) // ich prüfe hier ob der String nur aus Ziffern besteht
Nein. Das wird hier nicht geprüft. Das ich auch wichtig zu verstehen.
Hier wird aus dem Stream in
nombre
gelesen. Wenn im Stream "123xzy" steht, wird einfach eben nur "123" eingelesen und xyz verbleibt im Stream. Das ist also ein Check, ob am Anfang des Streams etwas steht, das eine Zahl ist.Was für ein Datentyp hat "zahl"? Und ich frage mich überhaupt, warum du im Code so viele verschiedene stringstreams hast.
cin
ist doch bereits ein Stream, warum der Weg cin->zahl->istr->nombre?Halte die Stream-Benutzung minimal.
-
Darunter ist die ganze Aufgabe. Ich habe Probleme mit der Umwandlung und Speicherung der Ziifern in char-array.
Lesen Sie über die Tastatur einen String der Maximal-Lange 5 ein, der nur aus Ziffern
bestehen darf (Prüfung nach der Eingabe). Benutzen Sie eine string-Variable zur Spei-
cherung. Wandeln Sie diesen String in eine Zahl vom Typ long um, berechnen Sie das
Quadrat dieser Zahl und geben Sie es aus. Speichern Sie die einzelnen Ziffern des Resultats
anschließend in einem char array, wobei sie zwischen den Ziffern jeweils eine Leerstelle
lassen und geben Sie dieses Array aus. Bei dieser Aufgabe ist die Verwendung von Biblio-
theksfunktionen wie z.B. atol oder toString nicht erlaubt.Beispielausgabe:
Bitte Zahlenstring eingeben: 11222j
String enthaelt nicht nur Ziffern, bitte neu eingeben.
Bitte Zahlenstring eingeben: 1297343String zu lang, bitte neu eingeben
Bitte Zahlenstring eingeben: 1112Quadrat der eingegebenen Zahl: 1236544
char-Array: 1 2 3 6 5 4 4
-
@Swordfish weil die Aufgabe es frag
-
Wenn atol und toString nicht erlaubt sind, ist stringstream ganz sicher auch nicht im Geiste der Aufgabenstellung .
Das heißt aber auch, dass du effektiv noch gar nichts von der Aufgabe gelöst hast, so wie die Aufgabe gemeint ist. Du brauchst zunächst einmal einen Ansatz für die drei Funktionen "gucken, ob ein String nur Ziffern enthält", "String aus Ziffern in Zahlenvariable umwandeln", "Zahlenvariable als Dezimalstring mit Leerzeichen drin umwandeln". Da derzeit noch nichts davon da ist, kann man dir schwer konkret helfen, außer die Lösung hinzuschreiben. Fang daher mal an, die obigen drei Funktionen zu implementieren, und falls du dabei Probleme haben solltest (trotz ernsthafter Mühe diese selbst zu lösen), dann fragst du noch einmal konkret mit dem bis dahin vorhandenen Code um Rat.
-
@EBD Dann fang mal mit deiner eigenen
atoi
- besserstrtol
- an.
-
Lies den string am einfachsten mit getline ein - dann hast du die komplette Zeile in einer String-Variablen.
#include <string> #include <iostream> int main() { std::string s; std::getline(std::cin, s); Funktion: s auf Maximallänge checken (oder ist es so zu verstehen, dass man nur 5 chars aus dem Stream lesen darf?) Funktion: s auf Ziffern testen Funktion: s in Zahl umwandeln ergebnis = zahl * zahl; Funktion: ergebnis in Ziffern wandeln Funktion: ausgeben mit Leerzeichen }
Für alles, das mit "Funktion: " beginnt, solltest du am sinnvollsten eine eigene Funktion schreiben.
Gegebenenfalls kannst du "Funktion: s auf Ziffern testen" und "Funktion: s in Zahl umwandeln" auch kombinieren.