Rechnen mit Strings????



  • 1ntrud0r schrieb:

    kein standard aber noch lang kein getrolle 😡 😡 😡

    doch getrolle. Da wie du wohl selber weisst die Lösung in dem Forum falsch ist, dass ist nunmal das Standard C++ Forum.

    [quote0"Jargon File"][...] The well-constructed troll is a post that induces lots of newbies and flamers to make themselves look even more clueless than they already do [...][/quote]

    http://www.catb.org/~esr/jargon/html/T/troll.html

    HTH HAND

    btw. mehr als ein 😡 Smilie sorgt eh dafür, dass ich dich nicht ernstnehmen kann



  • Nein wäre es nicht, denn es kommen da auch Datums vor die vor dem 01.01.1970 liegen und Sekunden kann ich auch nich brauchen bei den größen passen die selbst ins long nichmehr rein.

    So hier hab ich mal den Quelltext, damit ihr das mal besser seht

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string name;
    	string anfangs_datum;
    	string end_datum;
    	cout<<"Willkommen zum Tagesberechner v0.2Beta"<<endl;
    	cout<<endl;
    	cout<<"Wie ist dein Name? ";
    	cin>>name;
    	cout<<endl;
    	cout<<"Hi "<<name<<"."<<endl;
    marke1:
    	cout<<"Gib bitte das Anfangsdatum ein im Format TT.MM.JJJJ ein.  ";
    	cin>>anfangs_datum;
    	int laenge_anfangs_datum;
    	laenge_anfangs_datum = anfangs_datum.length();
    	if (laenge_anfangs_datum > 10)
    		for (;;)
    		{
    			cout<<endl;
    			cout<<"Fehler!!"<<endl;
    			cout<<"Das Anfangsdatum ist zu lang."<<endl;
    			cout<<endl;
    			goto marke1;
    		}
    	if (laenge_anfangs_datum < 10)
    		for (;;)
    		{
    			cout<<endl;
    			cout<<"Fehler!!"<<endl;
    			cout<<"Das Anfangsdatum ist zu kurz."<<endl;
    			cout<<endl;
    			goto marke1;
    		}
    	cout<<endl;
    marke2:
    	cout<<"Hier bitte das Enddatum eingeben.  ";
    	cin>>end_datum;
    	int laenge_end_datum;
    	laenge_end_datum = end_datum.length();
    	if (laenge_end_datum > 10)
    		for (;;)
    		{
    			cout<<endl;
    			cout<<"Fehler!!"<<endl;
    			cout<<"Das Enddatum ist zu lang."<<endl;
    			cout<<endl;
    			goto marke2;
    		}
    	if (laenge_end_datum < 10)
    		for (;;)
    		{
    			cout<<endl;
    			cout<<"Fehler!!"<<endl;
    			cout<<"Das Enddatum ist zu kurz."<<endl;
    			cout<<endl;
    			goto marke2;
    		}
    	if (anfangs_datum == end_datum)
    		for (;;)
    		{
    			cout<<endl;
    			cout<<"Fehler!!"<<endl;
    			cout<<"Du hast 2mal das gleiche Datum eingegeben."<<endl;
    			cout<<endl;
    			goto marke1;
    		}
    	string anfangs_jahr;
    	string end_jahr;
    	string anfangs_monat;
    	string end_monat;
    	string anfangs_tag;
    	string end_tag;
    	anfangs_jahr = anfangs_datum.substr(6, 4);
    	end_jahr = end_datum.substr(6, 4);
    	anfangs_monat = anfangs_datum.substr(3, 2);
    	end_monat = end_datum.substr(3, 2);
    	anfangs_tag = anfangs_datum.substr(0, 2);
    	end_tag = end_datum.substr(0, 2);
    	if (anfangs_jahr > end_jahr)
    		for (;;)
    		{
    			cout<<endl;
    			cout<<"Fehler!!"<<endl;
    			cout<<"Das Endjahr liegt vor dem Anfangsjahr."<<endl;
    			cout<<endl;
    			goto marke1;
    		}
    	if (anfangs_jahr == end_jahr)
    		if (anfangs_monat > end_monat)
    			for (;;)
    			{
    				cout<<endl;
    				cout<<"Fehler!!"<<endl;
    				cout<<"Der Endmonat liegt vor dem Anfangsmonat."<<endl;
    				cout<<endl;
    				goto marke1;
    			}
    	if (anfangs_jahr == end_jahr)
    		if (anfangs_monat == end_monat)
    			if (anfangs_tag > end_tag)
    				for (;;)
    				{
    					cout<<endl;
    					cout<<"Fehler!!"<<endl;
    					cout<<"Das Enddatum liegt vor dem Anfangsdatum."<<endl;
    					cout<<endl;
    					goto marke1;
    				}
    	long anfangsjahr;
    	long endjahr;
    	long anfangsmonat;
    	long endmonat;
    	long anfangstag;
    	long endtag;
    	long jahresdifferenz;
    	jahresdifferenz = endjahr - anfangsjahr;
    	cout<<anfangsjahr<<"-"<<endjahr<<"="<<jahresdifferenz<<endl;
    
    	return 0;
    }
    

    Und zwar funktioniert das bis jetzt so, er fragt nach dem Namen und dem Anfangsdatum, dann überprüft er die Länge des Datums, dann fragt er das Enddatum ab, dann prüft er ob die beiden Datums verschieden sind. Dann zerlegt er die Datums in jeweils 3 Strings, der eine bekommt die Tage, der 2. den Monat und der 3. das Jahr, so is das bei beiden Datums. Dann überprüft er ob das Anfangsdatum vor dem Enddatum liegt, wenn nich giebts nen Fehler.
    Und jetzt kommt das Rechnen. Sinn des Programms soll es sein, die Differenz zwischen 2 Datums in Tagen herauszufinden, ich weis es geht bestimmt einfacher aber ich machs halt so wie ichs kann. Ab den longs soll dann die Rechnung kommen, aber mit den Strings und den longs das is ja so ne Sache. Also wie muß man das da reinschreiben??



  • kingruedi schrieb:

    1ntrud0r schrieb:

    kein standard aber noch lang kein getrolle 😡 😡 😡

    doch getrolle. Da wie du wohl selber weisst die Lösung in dem Forum falsch ist, dass ist nunmal das Standard C++ Forum.

    [quote0"Jargon File"][...] The well-constructed troll is a post that induces lots of newbies and flamers to make themselves look even more clueless than they already do [...]

    quote : personal attacks to a newsgroup, discussion list, or in email for no other purpose than to annoy someone or disrupt a discussion

    soviel zum Thema .. !!!



  • goto 😮 Dafür könntest du gesteinigt werden (keine Angst nicht von mir ;))

    Nimm hald eine der Funktionen von kingruedi her. Z. B. long jahr=methode1("1900"); In jahr würde dann 1900 als Zahl (long) stehen.



  • Könntet ihr euer kindisches Gezanke mal abstellen und mir mal bei dem Problem helfen??



  • 1ntrud0r schrieb:

    quote : personal attacks to a newsgroup, discussion list, or in email for no other purpose than to annoy someone or disrupt a discussion

    soviel zum Thema .. !!!

    Naja, mein Hinweis war 1. keine persönliche Attacke und 2. diente das eben nur zur Warnung des Newbies. Du bist dann auf die Diskussion eingestiegen und hast dadurch die Diskussion unterbrochen 🙄



  • Raven2 schrieb:

    Könntet ihr euer kindisches Gezanke mal abstellen und mir mal bei dem Problem helfen??

    öhm, wo genau ist denn jetzt dein Problem, die Funktionen anzuwenden, die ich dir gezeigt habe. Eigentlich ist das Problem doch schon gelöst (siehe auch AJs Posting)



  • Also mein Quelltext steht oben und wenn der String als Jahr 1805 gespeichert hat dann soll er das 1805 an long übergeben, wie mache ich das??
    Ja ich habe ein Problem mit deinem Lösungsansatz, weil er irgendwie bei mir so nicht wirklich Funktioniert.



  • kinggruendi: mir ist es ja auch erst bei deinem post dann aufgefallen das es kein 😞 standard ist .. ( wird halt zu oft verwendet ) 🙄 🙄



  • 1ntrud0r schrieb:

    kinggruendi: mir ist es ja auch erst bei deinem post dann aufgefallen das es kein 😞 standard ist .. ( wird halt zu oft verwendet ) 🙄 🙄

    war ja auch nicht alzu böse gemeint mein Kommentar, gibt nur leider keinen Smilie, der böse aussieht aber doch nicht so brutal, wie 😡 😉



  • Also wie setze ich deinen Lösungsansatz jetzt in mein programm rein, denn der Pflastert mich mit Fehlern zu.



  • Was für Fehler sind das denn?



  • Dem Compiler passt der Lösungsansatz nicht. Ich schreibs hier nochmal klipp und klar, ich will das ein String der einen zahlenwert gespeichert hat, zb 1120, diesen Wert an eine long oder int Variable weitergiebt, also das dann die long oder int den Wert 1120 hat.



  • AJ schrieb:

    goto 😮 Dafür könntest du gesteinigt werden.

    Jo, vor allem wenn er es so komisch verwendet.

    1ntrud0r schrieb:

    mir ist es ja auch erst bei deinem post dann aufgefallen das es kein standard ist ..

    <-Ausrede
    Hehe, die Schreibweise mit den Großbuchstaben ist ja auch ähnlich wie in den Standardsachen... :p 😉



  • Wieso nörgelt jeder an meinem goto rum?? Es giebt diesen Befehl also wird er auch benutz. Basta!! Und wie mache ich das nun das der String seinen Inhalt(der nur aus Zahlen besteht) genauso wie sie drin stehen an eine Variable int oder long übergiebt??



  • sag uns doch was dem Compiler daran nicht passt. Bei mir läuft mein Biespiel perfekt.



  • Wenn ich nur das so wie dus geschrieben habe nutze kommt diese Meldung
    error C2039: 'atol' : Ist kein Element von 'std'
    wenn ich Möglichkeit 2 rausnehme, das methode in meinen namen umwandle und die a´s in den Namen des Strings dann gefällt das dem Compiler garnicht.



  • Wenn ich nur das so wie dus geschrieben habe nutze kommt diese Meldung
    error C2039: 'atol' : Ist kein Element von 'std'

    besorg dir eine neue Standard-Library

    wenn ich Möglichkeit 2 rausnehme, das methode in meinen namen umwandle und die a´s in den Namen des Strings dann gefällt das dem Compiler garnicht.

    😕

    entweder versteh ich dich nicht oder du solltest noch mal tief in dein C++ Buch schauen



  • Und wenn ich dann die Variable long anfangsjahr benutze und ihr den inhalt des Strings anfangs_jahr zuteilen will also

    long anfangsjahr(const std::string &anfangs_jahr)
    { 
    	std::stringstream s(anfangs_jahr); 
    	long ret; 
    	s >> ret; 
    	return ret; 
    }
    

    kommt dieser Fehler vom Compiler
    error C2601: 'anfangsjahr' : Lokale Funktionsdefinitionen sind unzulaessig



  • Was heist neues Standart Library?? Ich hab MS VC++ 6.0, zwar Autoren Edition *Fluch* aber das macht ja nix.


Anmelden zum Antworten