wörter in zahlen umwandeln!

daniel_hh

Grünschnabel
Hallo, eine frage hab ich noch. Und zwar wie kann ich denn in das Prgramm z.B. zahlen in das Programm eingeben wie "drei" und er gibt mir als ergebnis 3 aus?
 
Meinst du das Programm ?

PHP:
#include <iostream>
#include <string>
#include <ctype>

using namespace std;

string unter20(unsigned long wert, bool eins)
{
  switch(wert)
    {
      case 1:
        if(eins)
          return("eins");
        else
          return("ein");
      case 2: return("zwei");
      case 3: return("drei");
      case 4: return("vier");
      case 5: return("fuenf");
      case 6: return("sechs");
      case 7: return("sieben");
      case 8: return("acht");
      case 9: return("neun");
      case 10: return("zehn");
      case 11: return("elf");
      case 12: return("zwoelf");
      case 13: return("dreizehn");
      case 14: return("vierzehn");
      case 15: return("fuenfzehn");
      case 16: return("sechszehn");
      case 17: return("siebzehn");
      case 18: return("achtzehn");
      case 19: return("neunzehn");
      default: return("-Fehler-");
    }
}

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

string zehner(unsigned long wert)
{
  switch(wert/10)
    {
      case 2: return("zwanzig");
      case 3: return("dreissig");
      case 4: return("vierzig");
      case 5: return("fuenfzig");
      case 6: return("sechzig");
      case 7: return("siebzig");
      case 8: return("achtzig");
      case 9: return("neunzig");
      default: return("-Fehler-");
    }
}

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

string unter100(unsigned long wert,bool eins)
{

  if(wert<20)
    return(unter20(wert,eins));

  if(wert%10)
    return(unter20(wert%10,false)+"und"+zehner(wert));
  else
    return(zehner(wert));
}

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

string unter1000(unsigned long wert, bool eins)
{
  if(wert<100)
    return(unter100(wert,eins));

  if(wert%100)
    return(unter20(wert/100,false)+"hundert"+unter100(wert%100,eins));
  else
    return(unter20(wert/100,false)+"hundert");
}

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

string tausend(unsigned long wert)
{
  string s="";
  if(wert>=1000)
    s=unter1000(wert/1000,false)+"tausend";
  if(wert%1000)
    s+=unter1000(wert%1000,true);
  return(s);

}

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

string million(unsigned long wert)
{
  string s="";
  if(wert>=1000000)
    {
      int mil=wert/1000000;
      if(mil==1)
        s="einemillion";
      else
        s=unter1000(mil,false)+"millionen";
      wert%=1000000;
    }
  return(s+tausend(wert));
}

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

string milliarde(unsigned long wert)
{
  string s="";
  if(wert>=1000000000)
    {
      int mil=wert/1000000000;
      if(mil==1)
        s="einemilliarde";
      else
        s=unter1000(mil,false)+"milliarden";
      wert%=1000000000;
    }

  return(s+million(wert));
}

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

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

  string s=milliarde(wert);
  s[0]=toupper(s[0]);
  return(s);
}

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




int main()
{
unsigned long wert;

  cout << "Bitte Zahl eingeben:";
  cin >> wert;
  cout << toWord(wert) << endl;

        return 0;
}
 
ne meine es genau andersrum. Bei diesem Programm wird ja ne Zahl eingegeben und dann sagt er dir das Wort. Aber ich wollte das genau andersrum, also drei eingeben und 3 rausbekommen!
 
moin


Das läßt sich auch einfacher mit weniger if machen!
In welcher Sprache soll es denn sein? C oder C++?


mfg
umbrasaxum
 
Ich hab die Lösung schon ,ich bräuchte nur eine Methode um 2 Strings zu vergleichen(nicht lexikographisch). Allerdings 2 C++ strings aus der STL (strcmp fuktioniert leider nicht))
Das wäre die Lösung (wenn auch unsauber) man müsste nur noch strcmp ersetzen.

PHP:
int main()
{
  char wert[200];
  cout << "Bitte Zahl eingeben:";
  cin >> wert;
  cout<<wert;
  string r(wert);
  int x=0;
  while((strcmp(r,toWord(x)))!=0)
  { 
	 x++;
  }
  cout<<x;	  
  int y;
  cin>>y;
  

        return 0;
}
 
Zuletzt bearbeitet:
In C++ soll das sein Ich habs mal so veruscht.
char main(char wert)

{
switch(wert)
{

case 'zwei': return('2');
}

cin>> wert;
cout << wert;
}

Aber leider gibt er mir immer wenn ich zwei eintippe z aus. Wisst ihr was ich verändern muss oder geht es garnicht?
 
moin


Hier eine möglichkeit:
Code:
struct zahl
{
	char zahltext[10];
} zahl[10];

int _tmain(int argc, _TCHAR* argv[])
{
	char text[10];
	

	strcat(zahl[0].zahltext, "null");
	strcat(zahl[1].zahltext, "eins");
	strcat(zahl[2].zahltext, "zwei");
	strcat(zahl[3].zahltext, "drei");
	strcat(zahl[4].zahltext, "vier");

	cin>> text;
	
	int i=0;
	while(i<=10)
	{
		if(strcmp(zahl[i].zahltext, text)==0)
		{
			cout<< i;
			break;
		}
        i++;
	}
         
         return 0;
}

Muss zugeben ist ne mischung aus C und C++ läuft aber ohne Probleme.

Zu dienem verushc mit " case 'zwei' " das geht weder bei C noch bei C++, so etwas geht "erst" bei C# und vielleicht bei C.Net.

Egal wie du es machst wirst du nie darum herumkommen erstmal die Zahlen als Text in deinen Quellcode zuschrieben! Oder du speicherst sie erst in einer Datei und liesst sie dann aus, aber das würde ich sagen erstmal nciht.



mfg
umbrasaxum
 
moin


Es wird nur ein z ausgegeben weil dein char wert nur ein Zeichen aufnehmen kann, also das erste deines eingegeben strings!

Kann es sein das du noch nciht viel mit C/C++ gemacht hast?
Es scheint als fehlt dir das Grundwissen das man selbst für do simple Sachen haben muss.


@Java/CppProgrammer
Das ist deine Lösung?! Ich wette so läuft sie nicht! Warum erhöhst du x wenn du es eh nciht wieder benutzt?! Kann es sein das du ne Schleife vergessen hast.


mfg
umbrasaxum
 

Neue Beiträge

Zurück