Zum Inhalt springen

morytox

Mitglieder
  • Gesamte Inhalte

    14
  • Benutzer seit

  • Letzter Besuch

  1. ja ich bin ja auch erst im lernstadium ... will mich an das verhalten von code erstmal rantasten ... mit letzten seite meinte ich die seite 1 hier im thread im forum .. da hast du meine stringtoarray funktion schonmal unter die lupe genommen , is die einzige stelle wo ich ein new verwende.. kanns da liegen ? und wenn ja , muss ich das dann in der Funktion verwenden (das delete) oder kann ich dass auch im mein programmcode dann würde ich es nämlich nach dem parsen wieder freigeben...
  2. wahrscheinlich isses dieses stringtoarray von der letzten seite , hast du nen beispiel wie ich das dann wieder freigebe ?
  3. Okay ... Prob again ... Jetzt bemerk ich dass ich nen Speicherleck habe wie ihr es mir gesagt habt ... Das is die Auslastung von meinem letzten Programmdurchlauf: Oben das ist noch ein unausgereifter algorithmus zur indexbestimmung um keine doppelten zu haben ... Kann mir das jemand mit dem Speicherleck erklären ? Es bringt mir nich viel wenn es mir wer sagt und ne andere Zeile code hinknallt ... lieber hab ich eine kleine Erklärung warum und dann kann ich es guten gewissens abändern. Schnmal Danke im voraus.
  4. Hat sich schon erledigt! index von pw war zu klein! und wieder nen Prob wo ich kp hab wo das herkommen soll -.-: char pw1,pw2,pw3,pw4,pw5,pw6,pw7,pw8; char pw[8]; system("cls"); cout << " Passworteingabe fuer den Debugmodus: "; pw1 = getch(); cout << "*"; pw2 = getch(); cout << "*"; pw3 = getch(); cout << "*"; pw4 = getch(); cout << "*"; pw5 = getch(); cout << "*"; pw6 = getch(); cout << "*"; pw7 = getch(); cout << "*"; pw8 = getch(); cout << "*"; cout << endl; system("cls"); for (int i=0; i<8 ; i++) { switch(i) { case 0: pw[i]=pw1; break; case 1: pw[i]=pw2; break; case 2: pw[i]=pw3; break; case 3: pw[i]=pw4; break; case 4: pw[i]=pw5; break; case 5: pw[i]=pw6; break; case 6: pw[i]=pw7; break; case 7: pw[i]=pw8; break; default: break; } } cout << pw[0] << pw[1] << pw[2] << pw[3] << pw[4] << pw[5] << pw[6] << pw[7] << endl; pass=arraytostring(pw); cout << pass << endl; Als laenge gibt mir strlen(pw) 24 aus obwohl sich doch nur 8 von 8 definierten darin befinden ... Die Ausgabe sieht auch komisch aus : erst das wort , dann nen paar sonderzeichen und dann das ganze wort nur umgekehrt o.O Funktion Arraytostring : #include <string> #include <iostream> using namespace std; string arraytostring(char* tempdat) { int lenge=strlen(tempdat); std::string tempstring(tempdat); return(tempstring); }
  5. Neues Problem! Ich möchte nun eine Auswahl erstellen bei der Verschiedene Datein eingelesen werden können (versch. Vokabellisten) Wenn ich diese nun anwähle Legt er nen String auf ne Variable... ich zeigs einfach mal: so isses Ursprünglich gewesen: ifstream myfile("dictlst.csv"); if(myfile.is_open()) { while(!myfile.eof()) { getline(myfile, line); index += 1; } index -=1; myfile.close(); if(debug==true){ cout << "Indexgroesse betraegt: " << index << endl << endl; } } else cout << "Unable to open File" << endl; Jetzt wollte ich nen string unitifile machen auf dem dieser wert: "dictlst.csv" liegt und diesen anstelle des Strings verwenden. Das hat er nicht gemacht da er dafür keine Funktion kannte also so : ifstream myfile(unitifile); Der Folgende Code ist dann ne variante unter der es zu Kompilieren ging , aber das File kann er dann trotzdem nicht öffnen ... Wie kann ich an das Problem rangehn ? ifstream unitifile; if(unitifile.is_open()) { while(!unitifile.eof()) { getline(unitifile, line); index += 1; } index -=1; unitifile.close(); if(debug==true){ cout << "Indexgroesse betraegt: " << index << endl << endl; } } else cout << "Unable to open File" << endl;
  6. das war weiter unten ... habe ich aber lösen können da cin >> xyz ja bekanntermaßen kein leerzeichen nimmt habe ich es dann über cin.getline gelöst Und die Probleme bei der fehlerkennun konnte ich auch allein irgendwie fixen... wenn ich mein programm ma optimieren will werd ich die ganzen zeilen hier einbaun . aber noch bin ich so in der lernphase dass ich möglichst viel selber schreiben möchte und wenig vorgefertigte funktionen nutzen möchte ... wenn ich weiß wies alles funzt nehm ich dann auch gern den sicheren kürzeren weg! Trotzdem danke für die hilfe !
  7. Habe die Funktion jetzt wie folgt bearbeitet: #include <string> using namespace std; char* stringtoarray(string line) { char* charline=new char[line.length()+1]; for(int i=0; i<line.length();i++) charline[i]=line[i]; charline[line.length()]='\0'; return(charline); } Hab auch erstmal den Fehler mit falschem auslesen nicht enddecken können ... jedoch nur weil ich nicht ausfühlich testen kann da er keine strings mit leerzeichen annimt ... sobald eins drin is (eingabe) sieht er diese als 2 wörter ... kann man das umgehen ?
  8. Sorry 4 Doppelpost aber ich hab nen neues Prob , hab es mich der Alten methode zum funzen gebracht (strtok).... jetzt hab ich das prob dass bei einigen wörtern manchmal "der" "er" oder sowas angehängt ist ... o.O in der datei Dictlst stehts aber richtig drin ... ich poste mal den text der aktuellen umsetzung: int l,i; int index=0; string line; ifstream myfile("dictlst.csv"); if(myfile.is_open()) { while(!myfile.eof()) { getline(myfile, line); index += 1; } index -=1; myfile.close(); cout << index << endl; } else cout << "Unable to open File" << endl; string vergl; char* verglwort=NULL; char* ger=NULL; char* engl=NULL; char* engl2=NULL; char* engl3=NULL; string gerstr,englstr,engl2str,engl3str; //index = listenlaenge l=randomlang(); i=randompos(index); char* cuts; string wortliste[5]; int indexnummer; cout << i << endl; ifstream file("dictlst.csv"); if(file.is_open()) { while(!file.eof()) { getline(file, line); char* wort=stringtoarray(line); int x = 1; int n = 0; bool y = true; char *str1; //cout << "String: " << wort << endl; str1 = strtok(wort, ";"); /* extract first string from string sequence */ indexnummer = atoi(str1); if (indexnummer == i) { //cout <<indexnummer<<endl << l <<endl; //cout << "i: " << x << str1 << endl; while (y == true) /* loop until finishied */ { str1 = strtok(NULL, ";"); printf("%i: %s\n", x, str1); /* extract string from string sequence */ switch(n) { case 0: ger=str1; break; case 1: engl=str1; break; case 2: engl2=str1; break; case 3: engl3=str1; break; default: cout << n << endl; break; } if (str1 == NULL) /* check if there is nothing else to extract */ { cout << "Tokenizing complete" << endl; y = false; } //cout << str1 << endl; x++; n++; } cout << "Indexnummer: " << indexnummer << " Deutsches Wort: " << ger << " 1. Englisches Wort: " << engl << endl; } } file.close(); } else cout << "Unable to open File" << endl; gerstr=arraytostring(ger); englstr=arraytostring(engl); Habe ne ausgabe gleich bei der tokenbestimmung eingesetzt und da kommt es schon vor ... csv datei ist wie gesagt sauber ... irgendwo kommen reste oder weiß ich was her die er anhängt ... und noch ein problem: wenn ich wörter mit leerzeichen eingebe erkennt er diese als 2 wörter o.O
  9. ok da merk ich dasses mit meinen kenntnissen wohl doch noch nicht so gut gestellt ist ... kp ^^
  10. Danke für deine antwort! Ist wahrscheinlich noch einfacher, aber kannst du mir den Teil in der while schleife erklären ? wo kommen die 3 oder mehr teile aus dem line string dann genau hin ? bzw. wann legt er was auf cuts?
  11. danke für die schnelle antwort! Ich probier das mal ! Das war nach einer nich allzulanger recherche wohl ne akzeptable lösung ... wie gesagt das war auch nur nen abtippen. Ich versuch halt beides mal =)
  12. ifstream file("dictlst.csv"); string line if(file.is_open()) { while(!file.eof()) { getline(file, line); char* wort=stringtoarray(line); cuts = tokenizer(wort, ';'); cout << strlen(cuts) << endl; Cuts ist nen zeiger (char*) mit der letzten zeile hat er dann seine Probleme. habe die beiden folgenden funktionen verwendet: String to array: #include <string> using namespace std; char* stringtoarray(string line) { char* charline=new char[line.length()]; for(int i=0; i<line.length();i++) charline[i]=line[i]; return(charline); } und den geschriebenen Tokenizer (hatte ich als ne art vorlage im netz gefunden , glaube hier is das Prob mit der Terminierung--> #include <stdio.h> #include <string.h> char* tokenizer(char* lines, char seperator) { char* curr = NULL; char* ret = NULL; static char* buffer = NULL; if(lines) { buffer = lines; } curr = buffer; if(curr) { while(*curr != seperator && (*(curr++)) != '\0'); if(*curr == '\0') { return NULL; } *curr = '\0'; ret = buffer; buffer = curr +1; } return ret; }
  13. Hi Leute. Bin beim programmieren auf nen fehler gestoßen , eigentlich wollte ich nur nen Chararray in nen String umwandeln aber da bekomm ich bei egal welcher methode nen Laufzeitfehler. Also er compiliert aber gleich dannach bekomm ich ein fehler von ******* ausgespuckt ... Bissel oll ... z.b. beim verwenden der funktion strlen hat wer ne ahnung von euch ?
  14. Hallo alle Zusammen... Habe die Prüfungen und lösungen für FiSi bis 2007 und suche ab diesem Zeitpunkt mindestens genauso dringend die Lösungen und Fragen. bitte meldet euch unter morytox@hotmail.de greetz mory

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...