Compiler ????
-
Ich glaube wir meinen das Gleiche.
Also ich habe meinetwegen: ((2*3)-4*(5+8))Als erstes lese ich die Zeichen ein:
Stack1: (
Stack2: ((
Stack3: ((2
.
Stack6: ((23) So jetzt nehme ich den Klammerbegriff raus und rechne ihn
seperate aus. Und fürge ihn dann wieder ein.
Stack7: (6
Stack8: (6-
Stack9: (6-4
Stack10: (6-4
Stack11: (6-4*(
.
Stack15: (6-4*(5+8) Das Gleiche wie oben
Stack16: (6-4*13) Wieder rauslesen, ausrechen und wieder reingeben.
Stack17: -46Ergenis: -64 >>> Oder ist der Operationsaufwand dafür zu groß ??
Problem ist jedoch die Umsetzung !
-
Ja wahrscheinlich meinen wir in etwa das gleiche. Ich denke hald, dass du das Rechnen erstmal hinten dranstellen solltest, da ja das das einfachste darstellt. Versuch erstmal die Logik der Klammern zu realisieren und deren Inhalt rauszufiltern, denn genau das brauchst du dann zum Rechnen ;).
-
Steht sowas ähnliches nicht im K&R?
-
Lösung:
Mein Posting aus diesem Thread:
http://www.c-plusplus.net/forum/viewtopic.php?p=410430&highlight=#410430
-
Also mein erstes Problem ist jetzt erstmal die Deklaration eines Strings.
Bsp:
Ich habe die Klassen <iostream.h> und <string> implementiert und möchte eine Stringvariabel deklarieren.#include "stdafx.h"
#include <iostream.h>
#include <string>int main()
{
string t1 = "Hallo";
cout <<"schitt";
return 0;
}Macht er aber nicht !! Und ich weiß nicht warum ?
-
<iostream.h> ist der alte Headder, also benutze doch <iostream>.
Dort kannst du dann auf die Sachen im namespace std zugreifen, genauso wie in <string< auch. Also einfach using namespace std hinter das includieren der Header schreiben, oder std::string.Gruß
Entyl SaPS.:Sinnvoll ist es auch immer Fehermeldungen mit anzugeben.
-
Ihr solltet euch mal Gedanken darüber machen, warum das Forum ANSI-C heißt.
-
Hmmmmm..........
Ich möchte jetzt einen String in den Typ Integer umwandeln. Wie stelle ich das an.
string a="1";
int b;
b=a;Funktioniert leider nicht.
Stellt using namespace std da vielleicht eine Funktion bereit ?
Mit freundlichen Gruß
-
schlag mal in deiner Compilerdoku mal unter "strtol" nach.
bzw. schau dir einfach mal alle String routinen an, obwohl, strtol reicht eigentlich schon für dein Problem.mfg.
-
DannyB4281 schrieb:
Also mein erstes Problem ist jetzt erstmal die Deklaration eines Strings.
Bsp:
Ich habe die Klassen <iostream.h> und <string> implementiert und möchte eine Stringvariabel deklarieren.#include "stdafx.h"
#include <iostream.h>
#include <string>int main()
{
string t1 = "Hallo";
cout <<"schitt";
return 0;
}Macht er aber nicht !! Und ich weiß nicht warum ?
jetzt kommt es wirklich drauf an, ob du c oder c++ machst. das ist nunmal ein riesenweiter unterschied.
dieser code ist c++, und lass dabei das stdafx.h bloß wegund iostream bitte ohne .h , und unter die präprozessoranweisungen noch ein using namespace std;
für dein problem in c++ steht eine lösung im c++ faq (einmal string nach int und zurück)
aber du musst dich entscheiden, damit du jeweils richtig verschoben werden kannst.
in c geht das anders!!
-
Also ich bin anfänglich bei meiner Software auf Win32-Konsolenanwendung gegangen.
OK <iostream.h> war mein Fehler. Habe ich áuch ohne .h !!
Aber ohne "stdafx.h" läuft das ganze Programm garnicht. Also nicht mal "Hallo Welt ";)
Weiß zwar nicht warum, aber ist erstmal so.
Garnicht so einfach eure Sprache.
-
Aber ohne "stdafx.h" läuft das ganze Programm garnicht. Also nicht mal "Hallo Welt "
Doch, läuft es. Du musst eine "Leere Anwendung" (oder ähnlich) erstellen (Im VS 7 kannst du das auswählen, nachdem du den Art der Anwendung ausgewählt hast).
-
OK. Hab ich gemacht.
Alles eingegeben ohne "stdafx.h"....
Es kommt ein Pop-Up Fenster mit dem Inhalt " Das Prg kann nicht ausgeführt werden"
Er zeigt aber NUll Fehler und Null Warnungen an !
-
Also wenn ich ein neues Projekt eröffnen möchte. Dann habe ich erstmal eine große Auswahl. Dann nehme ich eine Win32-Konsolenanwendung. Ist das geeignet dafür ?
So nachdem ich dies getätigt habe, besteht die Auswahl zw. ein leeres Projet, eine einfache Anwendung, eine "Hallo Welt" Anwendung und eine Anwendung die MFC unterstützt. Nehme ich eine einfache Anwendung bzw. eine Hallo Welt Anwendung dann geht ohne "stdafx.h" garnichts. Nehme ich ein leeres Projekt kommt der besagte Fehler.Wie muss ich vorgehen dass ich hier jetzt vernünfig auf C++ Basis den Quellcode eingeben kann ?
Wie gesagt ich bin da der pure Anfänger !!!
Mit freundlichen Gruß
-
Datei->Neu
Projekte Win32-Konsolenanwendung
ein leeres ProjektDatei->Neu
Dateien C++ Quellcodedatei#include <iostream> #include <string> using namespace std; int main() { string t1 = "Hallo"; cout <<"schitt"<<endl; return 0; }
einfügen.
Funzt bei VC++ problemlos.
-
Coole Sache.
Funzt jetzt auch.
Ich habe immer blos nen normales Fenster dann aufgemacht.Danke.
Aber die nächsten Fragen kommen bestimmt bald
Aber lacht nicht dabei
-
So.
Problem strtol zum allgemeinen Verständnis.
char *fach="2"; int d=strtol(fach,0,10); int ergebnis=d*2; cout << ergebnis;
OK das funktioniert auch. Ergebnis ist 4.
Nun habe ich aber schon einen String auf einer Variablen und wollte die auf *fach legen.
Beispiel:
char *fach=test; int d=strtol(fach,0,10); int ergebnis=d*2; cout << ergebnis;
Das Problem an der Sache ist,dass ich vorher aus einen String(formel) einen Teil herauskopiert habe und den auf die Variable(test) gelegt habe.
Und das funktioniert in diesem Fall nicht. Was muss ich anders machen ?
-
Der übergebene nullterminierte String muss schon in einem richtigen Format sein. Aber so ganz ohne Fehlermeldung, und ohne zu wissen wie genau dein test aussieht kann ich dir da jetzt nicht weiterhelfen.
Gruß
Entyl Sa
-
OK.
Auf test liegt 2+3
Fehler:
error C2440: 'initializing' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' kann nicht in 'char *' konvertiert werden
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werdenIch stell mal meinen ganzen Code zur Verfügung. Der Anfang ist bissl bearbeitet. ´Bei der Rechenoperation(Umwandlung usw) Geht es mit erstmal nur um die Funktionalität der Funktionen, wenn dies Funktioniert mache ich es freundlicher
Habe es bis jetzt erstmal auch nur in einer Klasse. Wird dann ebenfalls geändert.
#include <iostream> #include <string> #include <stdlib.h> using namespace std; class eingabe() { string formel; string test; int i=0, a=0, b=0; cout <<"Ihre Eingabe: "; getline(cin, formel); cout << "Ihre Eingabe war : " << formel<<"\n"; int laenge=formel.length(); while (i<=laenge-1) { if (formel[i]=='(') { a++; } if (formel[i]==')') { b++; } i++; } if ((a==b) && !(formel[0]==')') && !(a<b)) { cout <<"String ist OK !!! \n"; } else { cout <<"Ueberpruefen Sie die Aussage auf die korrekte Klammeranzahl !!\n"; } //Hier beginnt die Rechenoperation !!! formel.erase(0,1); //Erste Zeichen der Formel löschen int pos =formel.find("("); //Suchen der ersten öffnenden Klammer cout <<pos<<"\n"; //Ausgabe der Position (Integer) int pos1 =formel.find(")"); //Suchen der folgenden schließenden Klammer cout <<pos1<<"\n"; //Ausgabe der Position (Integer) int anzahl=pos1-pos; //Bestimmung der Anzahl der zu löschenden Zeichen test.append(formel,pos,anzahl+1); //rauskopieren aus Formel die Anzahl der Zeichen cout << test<<"\n"; //rauskopierte Zeichen liegen jetzt auf test test.erase(0,1); //löschen der ersten Klammer in Test test.erase(pos1-1,1); //löschen der letzten Klammer in Test cout <<test<<"\n"; //Ausgabe des Klammerinhaltes */ char *fach=test; int d=strtol(fach,0,10); int ergebnis=d*2; cout << ergebnis; return 0; } int main() { eingabe(); return 0; }
-
Wenn in test "2+3" steht, dann kommst strtol damit eh nicht klar.
[edit]bzw. er nimmt die erste Zahl[/edit]
Die Fehlermeldung sagt ja aber ansich schon alles aus, die kannst einen std::string nicht in einen char* konvertieren. Also entweder:const char* fach = test.c_str();
oder einfach direkt an strtol übergeben:
int d=strtol(test.c_str(),0,10);
Gruß
Entyl Sa