Rechnen mit Strings????



  • Zeig mal den Code in dem du das machst.

    BTW: Zu deinem Code auf der ersten Seite: Dir ist klar, dass for(;;){...} eine Endlosschleife ist die du sofort mit goto wieder verlässt und man sie besser nicht benutzen sollte nur um sich einen Scope zu schaffen? Mit anderen Worten: Lass das for(;;) weg.



  • Raven2 schrieb:

    Das is toll, hilft mir aber nich weiter, wie muß denn das aussehen, damit es funktioniert??

    mein Tipp ist lies ein gutes C++ Buch oder Tutorial, so kann man dir einfach nicht weiterhelfen.

    http://www.schornboeck.net/ckurs/index.htm
    http://www.mindview.net/Books/TICPP/ThinkingInCPP2e.html
    http://www.volkard.de/vcppkold/inhalt.html

    sollten ein paar Ansätze sein



  • du musst dir echt mal einen besseren fragestyle zulegen. woher sollen wir wissen was du falsch machst, wenn du weder fehler noch code postest. und bevor du wieder dein gesamtes spaghettiprogramm hier reintust:
    der fragende sollte ein minimales compilierbares beispiel posten, dass sein problem enthaelt. die meisten probleme loesen sich dann mit einem klatsch vor die stirn von selbst. nur sind viele leute zu faul dazu.



  • OKOK Also ein Minimales Beispiel
    Bei dem Hier hab ich mal alle Vergleiche die fehler vorbeugen sollen rausgelöscht:

    #include <iostream>
    #include <string>
    #include <sstream> 
    #include <cstdlib>
    using namespace std;
    
    	long anfangsjahr(const std::string &anfangs_jahr)
    	{ 
    		std::stringstream s(anfangs_jahr); 
    		long ret; 
    		s >> ret; 
    		return ret; 
    	}
    	long endjahr(const std::string &end_jahr)
    	{ 
    		std::stringstream s(end_jahr); 
    		long ret; 
    		s >> ret; 
    		return ret; 
    	}
    
    int main()
    {
    	string name;//is in dieser kleinen Variante nicht Benutzt
    	string anfangs_datum;
    	string end_datum;
    
    	cout<<"Gib bitte das Anfangsdatum ein im Format TT.MM.JJJJ ein.  ";
    	cin>>anfangs_datum;//Anfangsdatum
    
    	cout<<"Hier bitte das Enddatum eingeben.  ";
    	cin>>end_datum;//Enddatum
    
    	string anfangs_jahr;//Definition der strings die die Tage, Monate bzw Jahre aufnehmen
    	string end_jahr;
    	string anfangs_monat;
    	string end_monat;
    	string anfangs_tag;
    	string end_tag;
    	anfangs_jahr = anfangs_datum.substr(6, 4);//Hier bekommen die strings ihren Wert
    	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);
    
    	long jahresdifferenz;
    	jahresdifferenz = endjahr - anfangsjahr;//Hier kommt der Fehler
    	cout<<anfangsjahr<<"-"<<endjahr<<"="<<jahresdifferenz<<endl;
    
    	return 0;
    }
    

    Der Fehler is der Hier
    error C2296: '-' : Ungültig, da der linke Operand vom Typ 'long (__cdecl *)(const class std::basic_string<char,struct std::char_traits<char>,class std::allocato
    r<char> > &)' ist

    Hilft euch das jetzt weiter???



  • *ploing*. Du kannst doch einen String nicht einfach in ein long umwandeln. Wir sind hier nicht in irgendeinem Basic. Typen spielen eine Rolle. Deswegen solltest du zum umwandeln atol oder etwas ähnliches wählen...



  • Bei mir Klingelts da nich, so wie ichs hier gemacht habe, das war methode1 von der ersten Seite. Und dieses atol führt bei meinem Compüiler nicht zu gegenliebe.



  • warum hast du die gleiche funktion zweimal? und warum subtrahierst du funktionsnamen? und warum vergisst du das nicht alles und holst dir ein anfaengerbuch?



  • Also das ist total krumm da oben *confused*



  • aha, mastah sieht genauso wenig durch.



  • PeterTheMaster schrieb:

    aha, mastah sieht genauso wenig durch.

    Bäää, ich dachte das seien Stringvariablen wegen der fehlenden (). Dachte ich könnte das editieren bevor's jemand merkt. Warst schneller!



  • schau dir doch einfach mal die Links an, die ich gepostet habe. Du kannst einfach kein C++ und da bringt es nichts, wenn wir dir irgend welche Tips geben. Lern erstmal C++ zumindest ein paar Grundlagen!



  • Also ein paar Grundlagen kann ich schon, aber nur Grundlagen bringen mir wenig also programmiere ich immer mal was worauf ich lust habe, und wenn ich nichtmehr weiterkomme und mir auch Tutorials und Bücher (hab ich schon genug um drin schwimmen zu können) nicht weiterhelfen dann frage ich eben. Und sowas hab ich da nirgendst gelesen, also wäre jemand so nett und würde mir die sache mal so sagen das es verständlich ist???



  • du sollst in den buechern nicht schwimmen sonders sie lesen. und das hast du definitiv nicht. denn du kannst mir nicht erzaehlen, dass funktionsdefinitionen und aufrufe dort nicht erklaert werden.



  • Raven2 schrieb:

    Also ein paar Grundlagen kann ich schon, aber nur Grundlagen bringen mir wenig also programmiere ich immer mal was worauf ich lust habe, und wenn ich nichtmehr weiterkomme und mir auch Tutorials und Bücher (hab ich schon genug um drin schwimmen zu können) nicht weiterhelfen dann frage ich eben. Und sowas hab ich da nirgendst gelesen, also wäre jemand so nett und würde mir die sache mal so sagen das es verständlich ist???

    dein Problem ist, dass du entweder schlechte Bücher gelesen hast oder sie nicht verstanden hast. Da du leider so gut wie keine Grundlagen hast, kann man dir auch nicht so einfach weiterhelfen bei deinem Problem. Lies dich nochmal in die Materie ein.



  • kingruedi schrieb:

    Lies dich nochmal in die Materie ein.

    Geeignete Bücher stehen in der Bücherliste von c-plusplus.net. Vielleicht hast du ja schon eins davon in deiner Sammlung.



  • ich versuchs auch nochmal im guten...

    zunächst zu deiner Fehlermeldung:

    Raven2 schrieb:

    #include <string>
    using namespace std;
    
    	long anfangsjahr(const std::string &anfangs_jahr)
    	{ 
                  // bla
    	}
    	long endjahr(const std::string &end_jahr)
    	{ 
                 // bla
     	}
    
    int main()
    {
             // bla
    	string anfangs_jahr;
    	string end_jahr;
             // bla
    	jahresdifferenz = endjahr - anfangsjahr;//Hier kommt der Fehler
             // bla
    	return 0;
    }
    

    In der Zeile mit dem Fehler ziehst du zwei Funktionsnamen (keine Variablen oder Werte) voneinander ab (die Funktionen werden dabei nicht aufgerufen, solches muss bei dir in der Form

    endjahr(end_jahr)
    

    geschehen.

    Dies bedeutet, dass der string end_jahr an die Funktion übergeben wird, dort in eine Zahl (long) umgewandelt und zurückgegeben wird (siehe Funktionsdeklaration long anfangsjahr(const std::string &anfangs_jahr)). Der Rückgabewert vom Typ long kann dann auch für eine Subtraktion verwendet werden.

    Wenn du noch die Ausgabezeile korrigierst (auch hier übergibst du Funktionsnamen, als wären es Werte vom Typ string) wird die Sache richtig erfolgreich:

    jahresdifferenz = endjahr(end_jahr) - anfangsjahr(anfangs_jahr);//Hier kommt jetzt kein Fehler mehr
        cout<<anfangs_jahr<<"-"<<end_jahr<<"="<<jahresdifferenz<<endl;
    

    p.s. wenn du programmieren lernen willst und nicht an C++ gebunden bist... gibt es deutlich anfängerfreundlichere Programmiersprachen, in denen man auch den Unterschied zwischen Funktionen und Werten und Variablen und Ausdrücken usw lernt. So richtig klasse zum Lernen fand ich beispielsweise Turbo Pascal, das hatte aussagekräftige Fehlermeldungen und ein schönes Hilfesystem.

    / Mibo



  • gibt es deutlich anfängerfreundlichere Programmiersprachen, in denen man auch den Unterschied zwischen Funktionen und Werten und Variablen und Ausdrücken usw lernt

    was soll das? was hat eine programmiersprache damit zu tun, was man lernt?
    und was soll das mit den 2 funktionen? bestaerke ihn doch nicht bei dem mist.



  • PeterTheMaster schrieb:

    gibt es deutlich anfängerfreundlichere Programmiersprachen, in denen man auch den Unterschied zwischen Funktionen und Werten und Variablen und Ausdrücken usw lernt

    was soll das? was hat eine programmiersprache damit zu tun, was man lernt?

    Wie schon gesagt.. ich finde C++ ausgesprochen anfängerunfreundlich, da bekommt man viel zu mächtige Werkzeuge in die Hand... ich würd einen Fahranfänger auch nicht in ein 500-PS-Auto stecken...

    Fehlermeldungen wie von ihm zitiert

    error C2296: '-' : Ungültig, da der linke Operand vom Typ 'long (__cdecl *)(const class std::basic_string<char,struct std::char_traits<char>,class std::allocato 
    r<char> > &)' ist
    

    haben einfach _null_ Aussagekraft wenn man nicht wenigstens ein bisschen durchblickt. Zig andere Sprachen würden da eine deutlich besser lesbare Meldung bringen, einfach weil deren Funktionalität keine Templates und namespaces usw. her gibt. Aber meinetwegen... richtig gelernt ist sicher auch C++ als Einstieg möglich.

    PeterTheMaster schrieb:

    und was soll das mit den 2 funktionen? bestaerke ihn doch nicht bei dem mist.

    Wenn ich den Code an zig Stellen ändere, dann blickt Raven doch wieder nicht, wo die kritischen Fehler lagen. Bin der Meinung, dass man erst die Synatx einer Sprache raffen muss ehe man sich für eine sinnvolle Strukturierung interessiert...



  • @Raven2
    Also ich würde dir auch raten, nochmal die Grundlagen durchzugehen. Dein Code zeigt, dass du anscheinend keine Ahnung hast, wofür Funktionen überhaupt da sind und wie man sie dann auch richtig aufruft.

    Du hast gefragt, warum goto so verpöhnt ist? Ganz einfach. Der Code wird dadurch unübersichtlich für andere Programmierer und auch für dich. Denn wenn du den Quellcode 3 Monate lang nicht mehr angeschaut hast und dann dich wieder einarbeiten musst, dann wirst du dich selber verfluchen. Es ist dann nämlich ziemlich schwierig, die ganzen Sprünge nachzuvollziehen.



  • Das nennt man spagettie code da er mit den GoTos so verstickt is wie spagetties 😋


Anmelden zum Antworten