Anfängerfragen zu einem Projekt mit Klassen
-
ventilatores schrieb:
@Kóyaánasqatsi - ja sorry, aber solch Klugscheisser getue hilft mir nicht weiter!
Ich sitze hier mit einem Buch: Einstieg in C++ von Arnold W. und lese mir die ganze Zeit was über Klassen durch!Wenn man andere Leute um Hilfe fragt und deren (gute) Ratschläge dann als Klugscheißerei beschimpft, wird man kaum nochmals Hilfe bekommen.
@Toplan - ja das habe ich schon gemacht
Dann zeig doch mal her! Und verwende dabei die cpp-tags, ich habe das Gefühl, dass du so einer bist, der den Code hier als normalen Text hinschreiben würde.
-
Dein Denkansatz ist ein falscher (oder ungeeigneter). Klassen machen (primär) nichts. Klassen sind etwas.
Die Dinge, die du beschrieben hast, sind m. E. klassische Anwendungsfälle für Funktionen. Sich damit die Grundlagen anzueignen wird erstmal schwierig.
Klassische (Schul-)Beispiele für Klassen sind:
- Konto
- Fahrzeugetc.
Grüße... Heiko
-
ja Entschuldigung, die von Kóyaánasqatsi angegebene Seite ist ganz gut und die Klassen sind besser als in meinen Buch beschrieben....
ich versuche es nochmal selbst...
-
Versuch doch erstmal einen BeispielCode für eine Klasse und ihre Verwendung zu finden. Wenn du dann an einzelnen Stellen noch Probleme hast, die sich nicht googeln lassen, dann können wir dir hier gern weiterhelfen

-
[cpp]Ctext_analyse.h [cpp]#pragma once class Ctext_analyse { private: char* text; int lang; void datei_laden(); public: Ctext_analyse(void); ~Ctext_analyse(void); }; //--------------------------------- Ctext_analyse.cpp #include "Ctext_analyse.h" #include <fstream> using namespace std; Ctext_analyse::Ctext_analyse(void) { } Ctext_analyse::~Ctext_analyse(void) { } void Ctext_analyse::datei_laden() { // Datei f. Eingabe und oeffnen fstream inout ("collection.txt",ios::in); // aktuelle Position = File Anfang lang = 20000; text = new char[lang+1]; inout.read(text, lang); // Datei lesen lang = inout.gcount(); // wie lang ist die Datei denn wirklich inout.close(); text[lang]= 0; // macht genau am Ende des Textes Schluss cout << text << endl; } //---------------------------------------------- projekt.cpp #include<iostream> #include <fstream> using namespace std; #include "Ctext_analyse.h" int main() { Ctext_analyse ta; ta.datei_laden(); return 0; }Problem:
mit welchen Befehl kann ich jetzt einzelne Wörter raussuchen?
vielen dank.
Venti
-
die auszulesende Datei ist 16,6 kb groß, deshalb habe ich 20000 angegeben und Zeile 41-43 hilft mir dabei.
-
Hallo,
hier mal ein paar Ansätze:
1. ich fände std::string hier um einiges geeigneter ...
2. was ist das mit dem 'lang'?, lies doch einfach bis zum Ende der Datei
3. um die Wörter zu zählen könnte man ne std::map nehmenGruß Simon
-
hi varginator,
ich würde doch lieber so fortfahren
Ctext_analyse::datei_suchen(void) { }und ein/mehrere Schleifen bauen. // so einfach wie möglich erstmal
ich seh hier noch nich ganz durch -> std::map
gruß
Venti
-
ventilatores schrieb:
...so einfach wie möglich erstmal...
Dann solltest du dennoch mindestens std::string betrachten (Die C++ Stringklasse).
std::vector und std::map sind sehr häufig eingesetzte Containerklassen (std::vector kannst du dir als Array vorstellen, das bei Bedarf die Größe verlängert, std::map wiederum kann man als Lexikon betrachten: Ein Container mit Schlüssel/Wertepaaren). In der Regel ist nur der Ersteinstieg etwas komplizierter, sie erleichtern aber vieles.
cu André
-
naja, ich habe ehrlich gesagt Angst das ich alles wieder vermurkse und nichts mehr geht.
Ich habe erstmal so angefangen und gehe dann systematisch vor...aber das mit den container Klassen hört sich ganz interessant an.
void Ctext_analyse::datei_suchen(void) { int i; for(i=0; i<lang; i++); { cout << text[i] << endl; } // erst jetzt kann ich nach den Buchstaben suchen }
-
Hier z.B. lernst du, wie Dateien mittels C++ Zeilenweise ausgelesen werden:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39469.htmlDann musst die einzelnen Worte anhand von Trennzeichen ( punkt, komma, leerzeichen ) herausfiltern. Dabei kann dir std::string aus der STL weiterhelfen.
Am besten du beginnst erstmal mit dem sauberen Einlesen der Datei in einen std::vector und dann schaust du dir die vielfältigen Möglichkeiten der std::string an ( http://www.cplusplus.com/reference/string/string/ ) und überlegst dir ein Konzept, wie du am besten die Worte filterst.
Und wenn du was hast, können wir uns das angucken und dir im Zweifelsfall helfen

Edit: Tippfehler korrigiert

-
ja das ist gut, weil ich komme bei meiner Zählervariable grad nicht weiter.
Er gibt mir zwar alle r aus aber er soll sie anders darstellenvoid Ctext_analyse::datei_suchen(void) { int i; for(i=0; i<lang; i++)// erst jetzt kann ich nach den Buchstaben suchen { if('r'==text[i]) cout << text[i] << endl; } }
-
Wie solln sie den anders dargestellt werden?
... bei der for-Schleife musst du nicht schon vorher definieren
for(int i = 0; ...Gruß Simon
-
@venti
Vorhin wolltest du noch Wörter zählen oder suchen.
Jetzt suchst du nach einzelnen Buchstaben...Was genau willst du jetzt eigentlich?

-
... Wenn du natürlich nur die Buchstaben zählen willst, dann reicht auch ein std::vector<int> oder ein std::map<char, int> ...
Gruß Simon
-
ja, ich muss doch mal alles probieren und nur so kann ich lernen und ey bekomm ich hier nich mal ein Lob, ich hab mir alles allein zusamm geknistert!
void Ctext_analyse::datei_suchen(void) { int i; int z=0; for(i=0; i<lang; i++) { if('r'==text[i]) // text[i] an der Stelle i wird auf gleichheit mit r geprüft, wenn dann true wird { z=z+1; } } cout << "Anzahl: "<<z/*text[i]*/ << endl; }**
Nocmal zum Programm!**ich will ein Wort suchen das mit r beginnt und er soll mir alle Wörter mit r beginnend ausgeben, so wie google
ja und ich komm bei der Schleife nicht weiter, jemand ne Idee

gruß
Venti
-
ventilatores schrieb:
und ey bekomm ich hier nich mal ein Lob, ich hab mir alles allein zusamm geknistert!
Braver venti, das hast du gut gemacht! :p
(Weshalb erwartest du für etwas Code schreiben ein Lob?)ventilatores schrieb:
ich will ein Wort suchen das mit r beginnt und er soll mir alle Wörter mit r beginnend ausgeben, so wie google
Dann schau doch, ob vor dem 'r' jeweils ein Whitespace steht (Leerzeichen/Zeilenende/Tabulator), falls ja, beginnt dort ein Wort...
-
Du könntest ja schaun ob
Nexus schrieb:
... vor dem 'r' jeweils ein Whitespace steht (Leerzeichen/Zeilenende/Tabulator), falls ja, beginnt dort ein Wort...
... und ob danach noch mindestens ein Zeichen kommt ...
Falls du aber abprüfen willst, ob auch nur buchstaben nach dem 'r' kommen musst du schon mehr prüfen, oder per RegEx (Regular Expression) ...
Gruß Simon
-
morjens,
ich probiere das Wort "Wert" in meine Text zu suchen und die Anzahl der gefundenen Wörter (Wert) anzuzeigen, wo ist hier mein Denkfehler?
void Ctext_analyse::datei_suchen(void) { int i; int wert; int z=0; cout << "Welches Wort suchen Sie?" << endl; cin >> wert; for(i=0; i<lang; i++) { if('wert'==text[i]) { z=z+1; } cout << "*"; } cout << "Anzahl: "<<z<< wert << endl; }gruß
Vetila....tores
-
Jetz suchst du ein eingegebenes Wort zu suchen, was willst du denn nun? ...
void Ctext_analyse::datei_suchen(void) { int i; int wert; int z=0; cout << "Welches Wort suchen Sie?" << endl; cin >> wert; for(i=0; i<lang; i++) { if('wert'==text[i]) // Wieso liest du dann erst ein Wort ein? { // Außerdem verlgeichst du einen string mit einem buchstaben ... z=z+1; } cout << "*"; } cout << "Anzahl: "<<z<< wert << endl; }Du musst erstmal klar ausdrücken was du überhaupt machen willst und nicht wie du es machen willst ...
... wenn es ums Wörterzählen geht, dann ist z.B. eine std::map<std::string, int> möglich ....
Gruß Simon