Zum Inhalt springen

et_schneid

Mitglieder
  • Gesamte Inhalte

    9
  • Benutzer seit

  • Letzter Besuch

  1. Hi, genau das soll es sein, eine abgespeckte version von VI :-) Ich gehe jetzt mal genauer auf die Struktur ein: DNode ist die Listenklasse: Deklaration #ifndef DLIST_H #define DLIST_H #include "SString.h" class DList; // forward declaration class DNode { public: DNode(); DNode(SString *pM); ~DNode(); void print(); private: // DNode *pPrev; SString *pWaarde; DNode *pNext; friend class DList; }; class DList { public: DList(void); ~DList(void); void push_back(SString *pP); void print(); protected: void setRunner(unsigned int i); void insert(SString *pP); private: DNode *pHead; DNode *pTail; DNode *pRunner; unsigned int index; unsigned int size; }; #endif [/PHP] [b]Definition[/b] [PHP] #include <iostream.h> #include "DList.h" DNode::DNode() { // pPrev=NULL; pWaarde=NULL; pNext=NULL; } DNode::DNode(SString *pM) { // pPrev=NULL; pWaarde=pM; pNext=NULL; } DNode::~DNode() { delete pWaarde; } void DNode::print() { pWaarde->print(); } DList::DList(void) { pHead = new DNode; pTail = new DNode; pHead->pNext = pTail; // is possible because DList // pTail->pPrev = pHead; // is a friend of DNode size = 0; index = 0; pRunner = pHead; } DList::~DList(void) { pRunner = pHead; while (pRunner != NULL) { pHead = pHead->pNext; delete pRunner; pRunner = pHead; } } void DList::setRunner(unsigned int i) { index = 0; pRunner = pHead; while (index!=i) { pRunner = pRunner->pNext; index++; } } void DList::insert(SString *pM) { DNode *pK = new DNode(pM); pK->pNext = pRunner->pNext; // pK->pNext->pPrev = pK; // pK->pPrev = pRunner; pRunner->pNext = pK; size++; } void DList::push_back(SString* pM) { setRunner(size); insert(pM); } void DList::print() { DNode *pRunner; pRunner = pHead->pNext; while (pRunner->pWaarde!=NULL) { pRunner->print(); pRunner = pRunner->pNext; } } SString ist die Stringklasse: Deklaration class SString { public: SString(char *ps); SString(); SString(const SString &str); ~SString(); void print(); void and(SString stringx); void set(SString stringy); char* get(); private: int len; char *p; char *q; }; [/PHP] [b]Definition[/b] [PHP] #include <iostream.h> #include <string.h> #include <stdlib.h> #include "SString.h" SString::SString(char *ps) { len = strlen(ps); p = new char[len + 1]; strcpy(p, ps); }; SString::SString(){ char *ps = ""; len = strlen(ps); p = new char[len + 1]; strcpy(p, ps); }; SString::SString(const SString &str){ len = str.len; p = new char[len + 1]; strcpy(p, str.p); } SString::~SString() { delete [] p; } void SString::print() { cout << p << endl; } void SString::and(SString stringx){ int b=strlen(stringx.p); b = b + strlen(p) + 1; q = new char[strlen(p)]; strcpy(q,p); delete [] p; p = new char[b]; strcpy (p,q); strcat(p, stringx.p); } void SString::set(SString stringy){ delete [] p; p = new char[strlen(stringy.p) + 1]; strcpy(p, stringy.p); } char* SString::get(){ return p;} Die "main": #include "dlist.h" #include "stdlib.h" #include "iostream" int main() { DList l; char test[60]; cout << "Prompt: "; for (int i=0; i<5; i++) { cin >> test; l.push_back(new SString (test)); } l.print(); system("PAUSE"); return 0; } [/PHP] Push_back und print funktionieren, allerdings weiss ich nicht genau, wie ich weitermachen soll. Es ist in jedem Fall notwendig, dass ich die Eingabe abspeichern bzw. laden muss. Bei einer geladenen Datei sollte ein Insert ueber einen Trigger "i" mit nachfolgendem Parameter der Zeilennummer moeglich sein, prinzipiell muss also eine Zeile angefuegt werden. Wie sieht beispielhaft dafuer die main aus? Danke vorab und Gruss, ed_schneid
  2. hi, ich bin dabei einen sehr einfachen texteditor zu schreiben, der in einer dos box laufen soll. ziel ist es die die funktionen append, print, insert und vielleicht load bzw. save bereitzustellen. append und print funktionieren schon, aber mit insert habe ich so meine probleme (das ganze beruht auf einer verketteten liste). bei insert sollen parameter uebergeben werden (fuer die zeilennummer, nach der ein einzugebener text eingefuegt werden soll) der aufruf fuer zB. das einfuegen einer weiteren zeile nach der zweite zeile eines textes soll per kommandozeile so erfolgen: *i2 (wobei 2 fuer die zeile steht) abspeichern sollte so erfolgen: *s wie macht man so etwas am besten?? danke fuer hilfe vorab! gruss, ed_schneid
  3. gut, ich hab mir mal ein wenig literatur dazu besorgt und danke fuer die hilfe, echt super von euch!!! danke!
  4. vielen vielen dank fuer die muehe. warum loest du es ueber einen iterator?
  5. hallo und dankeschoen fuer die eingebung, but please give me an example. :-)
  6. Aha und wenn ich es public deklariere reichts? Oder siehst Du noch andere Fehler? ... leider werden aus irgendnem grund die compilerausgaben von der IDE falsch geparsed... hilf mir doch mal
  7. du wirfst mir nichts vor; da hast einfach du recht, war auch nur n chaotisches workaround; was haelst du hier von: #include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; class punt { private: int x, y; //vector<int> v; public: // int x, y; void eingabe(int xx, int yy); bool operator==(punt q); bool operator<(punt q); }; void punt::eingabe(int xx, int yy) { x = xx; y = yy; }; bool punt::operator==(punt q) { if ((x==q.x) && (y==q.y)) { return true; } else { return false; } } bool punt::operator<(punt q) { if ((x<q.x) || ((x=x.q) && (y < q.y))) { return true; } else { return false; } } int main() { int x,y; punt punkt; vector<punt> v; cout << "Gib was ein, pls?\n"; while(cin >> x, cin >> y, !cin.fail()) { punkt.eingabe(x,y); v.push_back(punkt); }; sort(v.begin(), v.end()); int size = v.size(); for (int j=0; j<size; j++) { cout << v[j].x() << "," << v[j].y() << endl; } //punkt.sortieren(); //punkt.ausgabe(); system("PAUSE"); }; [/PHP]
  8. nein, das habe ich zuerst auch gedacht, aber das ergibt einfach weniger sinn. ich habe es jetzt so geloest ... #include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; class punt { private: int x, y; // vector<int> v; public: void eingabe(); void sortieren(); void ausgabe(); }; void punt::eingabe(int xx, int yy) { x = xx; y = yy; }; bool punt::operator==(punt q) { if ((x==q.x) && (y==q.y)) return TRUE; else return FALSE; } bool punt::operator<(punt q) { if ((x<q.x) || ((x=x.q) && (y < q.y))) return TRUE; else return FALSE; } int main() { int x,y; punt punkt; vector<int> v; punkt.eingabe(); cout << "Gib was ein oder benutzt Du etwa AOL?\n"; while(cin >> x, cin >> y, !cin.fail()) { punkt.eingabe(x,y); v.push_back(punkt); }; sort(v.begin, v.end); //punkt.sortieren(); //punkt.ausgabe(); system("PAUSE"); }; [/PHP] ich denke, dass die aufgabe so gemeint ist ...
  9. hi, wollte mich erstmal vorstellen, bin der et_schneid und mach ein wenig hobbymaessige cpp-programmierung; bin aber nicht so der crack, leider. hab nun eine aufgabe, an der ich mir die zaehne ausbeisse; vielleicht habt ihr ja eine idee, wie ichs loesen kann (meine "antwort" auf die aufgabe steht weiter unten): ok, hier die aufgabe: Definieren Sie eine Klasse Punkt mit zwei int-Elementdaten, x und y. Benutzen Sie den STL-container Vector, um eine Reihe Punkt-Objekte zu speichern. Dafür muss von der Tastatur eine Reihe Paare x, y eingelesen werden. Es ist nicht bekannt wie viel solcher Paare eingegeben werden. Benutzen Sie bei der Eingabe ein nicht-numerisches Zeichen als Abschlusskode. Definieren Sie die Operatoren == und < für zwei Punkt-Objekte, wobei p<q die folgende Bedeutung hat: p.x < q.x || (p.x == q.x && p.y < q.y) Benutzen Sie den STL-Algorithmus sort, um die Reihe eingelesener Punkte zu sortieren und das laut den gerade definierten Sortier-Operator <. [/PHP] Und nun meine "Antwort" - leider unvollstaendig, liest nur einen wert ein und ueberlaedt die operatoren fuer sort nicht ... ka, wie man sowas macht... [PHP] #include <iostream> #include <vector> #include <algorithm> #include <stdlib.h> using namespace std; class punt { private: int x; vector<int> v; public: void eingabe(); void sortieren(); void ausgabe(); }; void punt::eingabe() { cout << "Gib was ein oder benutzt Du etwa AOL?\n"; while (cin >> x) v.push_back(x); }; void punt::sortieren() { sort(v.begin(), v.end()); }; void punt::ausgabe() { cout << "Sortiert sieht das so aus:\n"; int n = v.size(); for (int i=0; i<n; i++) cout << v[i] << endl; }; int main() { punt punkt; punkt.eingabe(); while(!cin.fail()) { punkt.eingabe(); }; punkt.sortieren(); punkt.ausgabe(); system("PAUSE"); }; kann mir mal jemand sagen, was ich falsch mache, bzw. wie ich meine loesung so erweitere, dass x und y im container gespeichert werden und ich diese sortieren kann (mit operatorenueberladung)? vielen, vielen dank und gruss, et_schneid

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...