Rechnen mit Strings????



  • Ich habe über 2 Strings jeweils ein Datum einlesen lassen und jedes der beiden Datums in 3 andere Strings aufsplitten lassen, so das ich jetzt je 2 Strings mit Tag, Monat, Jahr habe. Nun will ich mit den Zahlen weiterrechnen, also sprich ich will zB Jahr1-Jahr2 rechnen und die Differenz erhalten. Mit den Strings geht das ja irgendwie nich, und in long lassen sich die Strings auch nich umrechnen, also wie geht das??
    THX 4 ALL Help



  • .ToInt() .. StrToInt() sowas .



  • #include <iostream>
    #include <string>
    #include <sstream>
    #include <cstdlib>
    
    long methode1(const std::string &a) {
      std::stringstream s(a);
      long ret;
      s >> ret;
      return ret;
    }
    
    long methode2(const std::string &a) {
      return std::atol(a.c_str());
    }
    
    int main() {
      std::string a="10";
      std::cout << "a=" << methode1(a) << std::endl;
      std::cout << "a=" << methode2(a) << std::endl;
    }
    

    @1ntrud0r
    Troll woanders rum 😡



  • einfach über (int) *stringname* casten.
    (Wenn ichs richtig verstanden habe ;))



  • @kingruedi
    THX aber irgendwie Blick ich durch den Quelltext nicht durch 😕
    Kannst du mir das mal eben anschaulich erklären was da was macht??



  • das wandelt strings in longs um, du meintest ja

    Raven2 schrieb:

    Mit den Strings geht das ja irgendwie nich, und in long lassen sich die Strings auch nich umrechnen, also wie geht das??



  • Also wenn ich da jetzt richtig sehe sind das 2 verschiedene Methoden das zu machen?? Sind die longs dann Konstanten??



  • Wäre es nicht sinnvoll das Datum in eine Zeit umzurechnen, wie zum Beispiel
    die Unix-zeit (Sekunden seit 01.01.1970 00:00) oder NT-Filtime, dann die Mathe zu machen und anschließend wieder in einen String zu wandeln

    Gibt es dazu nicht Funktionen zum konvertieren im Rahmen von C++ oder C?



  • kingruedi schrieb:

    @1ntrud0r
    Troll woanders rum 😡

    kein standard aber noch lang kein getrolle 😡 😡 😡



  • 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.


Anmelden zum Antworten