Zeichenketten aus Strings lesen. Wie?
-
Hallo zusammen,
ich hoffe es ist als C++ Neuling gestattet hier einfach reinzuplatzen und zu Beginn gleich mit einigen Fragen um sich zu werfen ...
Was C/C++ betrifft bin ich auch noch recht neu. Ich lerne dies in Verbindung meiner derzeitigen Ausbildung zum Techniker. Da ich bis jetzt Spass an der Sache hatte, versuche ich grad etwas für den privaten Zweck zu schreiben.Ich beginne einfach mal, in guter Hoffnung, mein Problem zu schildern.
Mit dem Borland C++ Builder 6 ES versuche ich mein Problem zu lösen.Ich möchte aus verschiedenen Texen Zahlen raussuchen und diese in einem extra Fenster darstellen.
Die Texte sehen so aus: "Er verkaufte 4534445 Birnen, 43334 Bananen, 8761 Trauben, 23487 Pflaumen." Die Wörter Birnen, Bananen, Trauben und Pflaumen bleiben imm er gleich.
Mit Excel und VB hab ich das schon realisiert, da konnte ich nach den Zahlenreihen suchen, die je ein Zeichen vor den vier konstanten Wörtern stehen.
Das ist meinen wichtigstes Anliegen, ist das in C/C++ auch möglich?
Andere konstanten gibt es in diesem Text nicht.
Die vier extrahierten Zahlen möchte ich dann weiter in Tages-, sowie anderen Zählern zählen. Das ist allerdings das kleinere Problem denke ich.Da ich das als kleines "exe-Programm" haben möchte, reicht mir meine Ausführung mit Excel und VB nicht.
Ich sag schonmal vielen Dank.
MfG Ben
-
Ja, das ist selbstverständlich möglich. Ich kann dir leider kein Beispiel für den Borland C++ Builder geben, da ich ihn nicht besitze.
Aber hier ein kleines Beispiel als Konsolenanwendung(=keine grafische Oberfläche):
#include <iostream> #include <string> int main() { std::string input = "Er verkaufte 4534445 Birnen, 43334 Bananen, 8761 Trauben, 23487 Pflaumen."; for (unsigned int i = 0; i < input.length(); ++i) { if (isdigit(input[i])) { std::string count; while (isdigit(input[i])) { count += input[i++]; } ++i; std::string name; while (isalpha(input[i])) { name += input[i++]; } std::cout << name << " = " << count << std::endl; } } }
Wichtig: Es setzt voraus, dass die Eingabedaten korrekt sind!
-
Das geht auch einfacher.
Benjy schrieb:
Das ist meinen wichtigstes Anliegen, ist das in C/C++ auch möglich?
Ja, aber du solltest dich für eine Sprache entscheiden. Ein "C/C++" gibt es nicht.
Mit Streams ist das ziemlich simpel (wenn du dich auf die Korrektheit der Eingabe verlassen kannst):
#include <sstream> int main() { std::stringstream Stream("Es hat 225 Bananen"); std::string Wort; int AnzahlBananen; Stream >> Wort >> Wort >> AnzahlBananen >> Wort; }
Unter www.cplusplus.com findest du mehr zu den einzelnen Klassen. Mein Beispiel ist zwar nicht sehr elegant und wahnsinnig flexibel, aber verhältnismässig einfach. Ansonsten könntest du dir vielleicht benutzerdefinierte Manipulatoren anschauen...
-
Nexus schrieb:
Benjy schrieb:
Das ist meinen wichtigstes Anliegen, ist das in C/C++ auch möglich?
Ja, aber du solltest dich für eine Sprache entscheiden. Ein "C/C++" gibt es nicht.
In der Schule ist es so, dass wir hauptsächlich in C schreiben, jedoch gelegentlich C++ Befehle verwenden. Wir haben auch keinen Lehrbuch für den Unterricht. Der wird frei vom Lehrer gestaltet und dieser sagt, wir sollen beides benutzen .... -.- Ich hätts auch gern anderes bzw. eindeutiger ...
Vielen Dank für die beiden schnellen Lösungsvorschläge. Ich werd gleich mal rausfinden was dahinter steckt und obs funktioniert.
MfG Ben
-
Benjy schrieb:
Nexus schrieb:
Benjy schrieb:
Das ist meinen wichtigstes Anliegen, ist das in C/C++ auch möglich?
Ja, aber du solltest dich für eine Sprache entscheiden. Ein "C/C++" gibt es nicht.
In der Schule ist es so, dass wir hauptsächlich in C schreiben, jedoch gelegentlich C++ Befehle verwenden. Wir haben auch keinen Lehrbuch für den Unterricht. Der wird frei vom Lehrer gestaltet und dieser sagt, wir sollen beides benutzen .... -.- Ich hätts auch gern anderes bzw. eindeutiger ...
Dazu kommt noch, dass wir hauptsächlich mir der grafischen Oberfläche arbeiten und ich daher über Konsolenanwendungen noch weniger weiß ...Vielen Dank für die beiden schnellen Lösungsvorschläge. Ich werd gleich mal rausfinden was dahinter steckt und obs funktioniert.
MfG Ben
-
Benjy schrieb:
In der Schule ist es so, dass wir hauptsächlich in C schreiben, jedoch gelegentlich C++ Befehle verwenden. Wir haben auch keinen Lehrbuch für den Unterricht. Der wird frei vom Lehrer gestaltet und dieser sagt, wir sollen beides benutzen .... -.- Ich hätts auch gern anderes bzw. eindeutiger ..
Argh, das scheint echt schlimm zu sein. Aber leider ist der Grossteil der Lehrer so. Naja, falls dich das Programmieren wirklich interessiert, solltest du sowieso nebenan noch etwas machen und selbstständig dazu lernen.
Da wir uns hier im C++-Unterforum befinden, habe ich dir eine C++-Lösung gegeben. Vielleicht helfen dir diese beiden Threads ein wenig:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-210160.html
http://www.c-plusplus.net/forum/viewtopic-var-t-is-176361.htmlAnsonsten, wenn es um komplexeres Parsen geht, sind vielleicht reguläre Ausdrücke (Boost.Regex) oder sogar ganze Parser-Bibliotheken (Boost.Spirit) eine Möglichkeit.
-
Da ich ich wesentlich mehr C als C++ schreib, werd ich mich mal vertrauensvoll an das C Forum wenden ... hätte ich bei genauer Betrachtung der Foren bestimmt auch vorher merken können ... ^^
Ich danke euch, dem C++ Forum, für die Hilfe und hoffe, dass es im C Forum genauso weiter geht.MfG Ben