wörter in zahlen umwandeln!

So jetzt funktioniert es, hier der Sorce( falls mans übersieht, das "tuupper" aus der Funktion stringtoWord ist gelöscht worden):

PHP:
string toWord(unsigned long wert)
{
  if(wert==0)
    return("Null");

  string s=milliarde(wert);
  return(s);
}

//*******************************************************

int main()
{
  string r;
  string s;
  cin>>r;
  int x=0;
  s=toWord(x);
  while((strcmp(r.c_str(),s.c_str()))!=0)
  {
	  x++;
	  s=toWord(x);
  }
  cout<<x;

  int y;
  cin>>y;
return 0;
}
 
moin


Erklär mal bitte was dein Code macht?!
Wozu die Schleife?
UNd mit deiner Funktion kommst du an den if abfragen auch nciht vorbei, also genau das gleiche wie deiner erste "Version" nur das die if Abfragen in einerr eigenen Funktion stehen.


mfg
umbrasaxum
 
1. Das Programm funktioniert! Auch ohne dass ich if eingbaut habe.( Das if in der ersten Version war ein Versehen, es sollte while heißen)
2. Es funktioniert nach einem eigentlich sehr sehr leicht verständlich Prinzip:
Dem String s wird als erstes der Rückgabewert von toWord (0) zugewiesen.
Dann startet die while schleife, die solange läuft, bis (strcmp(r.c_str(),s.c_str())) 0 ist, die Strings also gleich sind. Die Schleife erhört mit jedem Durchlauft den Wert den toWord zurückliefert.


Irgentwie scheint es mir als hättest du irgentwas gegen mich.

Eigentlich gar nicht so schwer
 
Zuletzt bearbeitet:
toll......
Auf diese Weise musst du den gesamten Zahlenbereich als string abspeichern, den du kennen willst.
Bei einem normalen 4 Byte-Int sprengt die Datenmasse wahrscheinlich deine Festplatte.

Denk doch mal über methodischeres Vorgehen nach.

Ich habe eine Funktion für Zahlen->String umwandlung geschrieben und denke, mit ein wenig nachdenken (Was glaubst du, was ein Programmierer macht? -> Algorithmen entwerfen) könnte man die auch umkehren um es für deine Zwecke String->Zahl -Umwandlung zu benutzen.

Code:
string unter20[]={"","ein","zwei","drei","vier","fuenf","sechs","sieben","acht","neun","zehn","elf","zwoelf","dreizehn","vierzehn","fuenfzehn","sechszehn","siebzehn","achtzehn","neunzehn"};
string zehner []={"","zehn","zwanzig","dreissig","vierzig","fuenfzig","sechzig","siebzig","achtzig","neunzig"};
string gruppen[]={"","tausend","millionen","milliarden","billionen","billiarden","trillionen","trilliarden","quadrillionen"};


string getstring(int value){
	string result;
	bool bMinus = false;
	if(value<0){
		bMinus = true;
		value = -value;
	}
	if(value==0)
		result = "null";
	else if(value%1000==1){
		result = "minus";
		value/=1000;
	}
	int i = 0;
	while(value){
		result=gruppen[i++] + result;
		if(value%100<20)
			result = unter20[value%100] + result;
		else{
			result=zehner[value%100/10]+result;
			if(value%10)
				result=unter20[value%10]+"und"+result;
		}
		if(value%1000>=100)
			result = unter20[value%1000/100] + "hundert" + result;
		value /= 1000;
	}
	return (bMinus?"minus ":"")+result;
}
 
moin


@Java/CppProgrammer
Nö, hab nchts gegen dich, finde nur deine Art zu Programmieren merkwürdig.


@Beichtpfarrer
Du hast recht.
Nur bin ich mir nciht sicher, ob man so sehr auf deiner Funktion aufbauen kann/sollte.

Bei Eingaben wie "neunzehntausend" wird es wohl eher ums parsen und dann wieder ums vergleichen gehen. Aber trotzdem hast du mich auf gute Ideen gebracht werde mich gleich mal ranmachen.

Und gibt es bei dir nicht ein Problem wenn man eine 1 eingibt?!


mfg
umbrasaxum
 
Beichtpfarrer hat gesagt.:
toll......
Auf diese Weise musst du den gesamten Zahlenbereich als string abspeichern, den du kennen willst.
Bei einem normalen 4 Byte-Int sprengt die Datenmasse wahrscheinlich deine Festplatte.

Wieso sollte ich den ganzen Zahlenbereich abspeichern?
Beim dem Aufruf von toWord wird doch immer nur eine Zahl als String erstellt benutz und gelöscht.
Also hab ich immer nur einen String.
Das Programm läuft zugegebenermaßen extrem langsam, es war auch nur eine erste Lösung für seine Frage.
Irgentwie versteh ich nicht warum das Programm so langsam läuft.
Ich habe eine Funktion für Zahlen->String umwandlung geschrieben und denke, mit ein wenig nachdenken (Was glaubst du, was ein Programmierer macht? -> Algorithmen entwerfen) könnte man die auch umkehren um es für deine Zwecke String->Zahl -Umwandlung zu benutzen.

Genau das hab ich auch gemacht, wenn du dr meinen ersten geposteten code ansiehst,nähmlich eine Funktion Zahlen->String.
Dann habe ich durch überlegen(jaja sowas macht ein Programmierer)
das Ding umgedreht.
Das das langam ist sehe ich ein. Tut mir leid, ich bin halt noch ein Newbie.
 
Zuletzt bearbeitet:
Stimmt, musste gar nicht den gesamten Zahlenbereich speichern :)
Ich habs nicht richtig angeguckt, sondern nur otf gesehen, dass in einer while verglichen wurde.
Der Kommentar mit dem Überlegen war übrigens nicht auf dich abgezielt, sondern vielmehr auf den Fragesteller.

Warum das so langsam ist, sollte ja wohl klar sein:
-Erstellung von Zahlenstrings für jede Zahl unterhalb der gewünschten
-dabei oft Speicherreservierung usw für string-Klasse
-Vergleichen von ewig vielen Strings


@umbrasaxum
Warum, was für ein Problem bei 1 ?
Klar muss man da parsen und kann sicher nicht nur einfach abschreiben.
Ich mein vom Konzept her...
 
moin

Ja vom Konzept her hast du absolut recht! Da wollt ich auch ncihts gegen sagen.

Bei eins ist deine Ausgabe doch "ein"?!
Man mag mich pingelig nennen aber das finde ich falsch.


mfg
umbrasaxum
 
äh, lol, hatte nen kleinen Tippfehler...
Code:
	else if(value%1000==1){
		result = "minus";
		value/=1000;
	}
sollte eigentlich heißen (das hatte ich vorher auch schonmal so, aber wohl irgendwann wieder vertauscht...)
Code:
	else if(value%1000==1){
		result = "eins";
		value/=1000;
	}
 
Zurück