toInt in toString verwandeln

Lord_Calf

Grünschnabel
tag auch ich brauche eure Hilfe,

Code:
int Bankier::zahlen(string neuwert)
{
 int erg = 0;
 
 for (int i=0; i <= neuwert.size(); i++)
 {
  if(neuwert[i]=='M')
  {
   erg += 1000;
  }
  else if(neuwert[i]=='D')
  {
   erg +=500;
  }
  else if(neuwert[i]=='C')
  {
   erg +=100;
  }
  else if(neuwert[i]=='L')
  {
   erg +=50;
  }
  else if(neuwert[i]=='X')
  {
   erg +=10;
  }
  else if(neuwert[i]=='V')
  {
   erg +=5;
  }
  else if(neuwert[i]=='I')
  {
   erg +=1;
  }
 }
  return erg;
}

ist zum rechnen mit römischen zahlen ...
ich brauche en Script was das Gegenteil ausführt,
sozusagen

1666 wird zu MDCLXVI

Danke für eure Hilfe :rolleyes:
Sven aus Dresden

:nospam: http://www.secure24.tk
 
Du weiß aber schon, dass deine Funktion nicht korrekt arbeitet?
Zu deiner Frage: wenn du das brauchst, dann schreibs dir doch selber, is ne gute Übung
 
Halloohoo?

Das ist eine Methode einer Klasse die einwandfrei funktioniert
Und ich wollt das nicht selbst machen da ich mein Hirnwindungen noch für andere Dinge gebrauchen muss !

Danke für eventuel helfenden Beiträgen. :mad:
 
Du glaubst doch nicht im Ernst, dass das einwandfrei funktioniert?
Das Gegenteil findet man nach ungefähr 2 Sekunden Code-Studieren raus.
Macht dieser Code einen Unterschied zwischen IV und VI? Ist das in Wirklichkeit ein Unterschied?
....dann gebrauch mal schön deine Hirnwendungen und verbesser es...
 
zwischen glauben und wissen gibt es einen großen Unterschied... *es funktioniert HMPF*

Hauptprogrammaufruf der toInt Methode:
schieber.zahlen(neuwert); // hierbei ist neuwert ein string.size();

Der Unterschied ob nun IV oder VI ist im moment egal
Falls du nun eine Idee hast für die toString dann leg los wenn nicht lass es...!
 
Lord_Calf hat gesagt.:
es funktioniert
...
Der Unterschied ob nun IV oder VI ist im moment egal

Warum soll der Unterschied egal sein?
Das gleiche gilt natürlich auch für zb XC oder CX, das wird nunmal im römischen System so angewendet, wieso soll es egal sein, ob du eine Eingabe 90 in 110 umrechnest?

Und: Jo ich hab ne Idee...
..wart ich schreib dir glei mal nen pseudocode...
 
Code:
//parameter
int wert;
//result-value
string str;

char buchstaben[][2] = { {'M','D'}, {'C','L'}, {'X','V'}, {'I',0} };
int curwert = 1000;	//wert von M
int ibuchstabe=0;

while(wert){

	while(wert>=curwert){
		str+=buchstaben[ibuchstabe][0];
		wert-=curwert; }
	if(wert>= curwert/2 + curwert/10*4){
		str += buchstabe[ibuchstabe][1]+buchstabe[ibuchstabe][0];
		wert -= curwert/2 + curwert/10*4; }
	while(wert>=curwert/2){
		str+= buchstabe[ibuchstabe][1];
		wert -= curwert/2; }
	curwert/=1;
	++ibuchstabe; }

So ungefähr würd ichs machen
 
das ist zZ deswegen egal weil das Proggi die Buchstaben einzeln einliest und rechnet und ich schätz mal sogar du weist das 100+10 bzw. C+X oder 10+100 bzw. X+C das selbe ist.

Vieleicht weist du jetz worums geht...
 
Da ich weis das es einfach ist und ich gestern eigentlich nur keine lust hatte den krempel selbst zu schreiben hier eine Lösung die wohl leicht verständlich ist oder !?

Code:
string Bankier::buch(int erg)
{	
	string rom;
 
	while (erg != 0)
	{
		while (erg >= 1000)
		{
			rom += 'M';
			erg -= 1000;
		}
 
		while (erg >= 500)
		{
			rom += 'D';
			erg -= 500;
		}
 
		while (erg >= 100)
		{
			rom += 'C';
			erg -= 100;
		}
		while (erg >= 50)
		{
			rom += 'L';
			erg -= 50;
		}
 
		while (erg >= 10)
		{
			rom += 'X';
			erg -= 10;
		}
 
		while (erg >= 5)
		{
			rom += 'V';
			erg -= 5;
		}
 
		while (erg >= 1)
		{
			rom += 'I';
			erg -= 1;
		}
	}
		return rom;
}
 
Zurück