Zahlen, Basis umwandeln, rechnen mit string

kid87

Grünschnabel
Hi,
es geht um folgende Aufgabenstellung:
Benutzer gibt eine Zahl und die dazu gehörige Basis(2-16) ein. Desweiteren gibt er die neue Basis an in die die Zahl umgewandelt werden soll.
Mein Idee: Ich wandle die eingegebene Zahl erst einmal in das Dezimalsystem um.
Folgende Funktion soll dies erledigen:

basis = eingegebene Basis
basisausg = basis der Zahl nach der Umwandlung

Code:
double umrechnung(string zahl, double basis, double basisausg) {
int i=0;
int rest=0, ganzteil=0;
double len=0.0, erg=0.0;

len = laenge(zahl);   // laenge() berechnet die Länge des strings

for(i=0; zahl[i]!='\0'; i++, len--) {

	cout << endl << "zahl: " << zahl[i];     // wird richtig ausgegeben
	cout << endl << "pow: " << pow(basis,(len-1.0));    // wird richtig ausgegeben
	cout << endl << "erg: " << erg;    // hier wird irgendeine andere Zahl ausgegeben bei allen Durchläufen


	erg = zahl[i]*pow(basis,(len-1.0));
	
}

return erg;
}


Das Problem ist: er rechnet etwas falsches aus. Kann es daran liegen dass die Variable "zahl" ein string und kein int array oder double array ist? String deshalb weil ich prüfen will ob der Benutzer "exit" anstatt eine Zahl eingegeben hat. Mit atof() hat es bisher auch nicht besser geklappt.
Werden die Zeichen von string Zahl vielleicht als ASCII Code oder ähnliches interpretiert?

Danke schon mal für jegliche Hilfe,
Christoph
 
also wenn du die eingabe in einem string speicherst MUSST du atof() oder atoi() je nachdem benutzen weil er sonst nicht die zahl sondern einfach nur den Zahlenbustaben hat.

Wenn das programm startet kann ich mir nur vorstellen das er hier jetz wirklich den ASCII zahlencode dafür benutzt statt der eingegeben zahl.

atof wandelt nur die erste zahlenreihe um die er findet das ist dir klar oder?
Das heisst du müsstest bei der eingabe von 2-16 den string beim - trennen und beide teile in eine zahl um wandeln... dann hättest du zum beispiel beide eingegebenen zahlen.

hoffe das hilft dir weiter

MFG Hillkorn
 
Hi,
danke für die schnelle Antwort. Mit 2-16 meinte ich das die Basis zwischen 2 und 16 liegen soll.

Es wurde tatsächlich als ASCII Code interpretiert.
Habe nun aber eine Lösung gefunden. Nachdem ich wusste das es ASCII Code war, habe ich nur noch eine Beziehung/ Relation gebraucht und bin auch fündig geworden im Internet:

Zahl + 30Hex = ASCII-Zahl

bzw. nach Zahl aufgelöst

Zahl = ASCII-Zahl - 0x30 (<--30Hex von oben)


oder andere Möglichkeit:

string strVar = "27";
double dVar;

dVar = atof(strVar.data());



Thread kann damit geschlossen werden,
danke,
christoph
 
Zuletzt bearbeitet:
Zurück