Array durchsuchen



  • Natuerlich gibt es schon vorgefertigte Loesungen...

    set/map zum Speichern der Daten und boost::tokenizer zur zerlegung des strings.



  • achso

    Nun habe ich ein weiteres Problem... Habe soweit erstmal alles fertig, nur passiert nun nach der Eingabe des Benutzernamens nichtmehr viel...

    #include <iostream>
    #include <fstream>
    #include <cstdlib>
    #include <stdexcept>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <ctype.h>
    #include <sstream>
    
    using namespace std;
    
    string genrandfileout(char filename[255])
    {
    	string row;
        vector<string> content;
        ifstream file(filename);
    	if (!file)
    	{
    		return "Die Installation von CINA ist beschädigt. Programm abgebrochen.";
    	}
        while(getline(file,row)) content.push_back(row);
        int size = content.size();
        int random = rand() % size + 1;
        cout << content[random-1];
        return content[random-1];
    }
    
    string UpToLow(string str)
    {
    	int length = str.length();
    	for (int i=0;i<length;i++)
    	{
    		if (str[i] >= 0x41 && str[i] <= 0x5A)
    		str[i] = str[i] + 0x20;
    	}
    	return str;
    }
    
    int InSentence(string sentence, string querry)
    {
    	int returnit = 0;
    	istringstream istr(sentence);
    	vector<string> words;
    	string line;
    	while((istr >> line)) words.push_back(line);
    	for(vector<int>::size_type i = 0; i < words.size(); i++)
    	{
    		if(words[i] == querry) returnit = 1;
    	}
    	if(returnit == 1) { return 1; }
    	return 0;
    }
    
    int main()
    {
    	// Variablen deklarieren
    	// --START--
    	int returnending = 0;
    	string inputdefault;
    	// --END--
    	// Zufallszahlen - Seed Deklarieren
    	// --START--
    	srand(time(0));
    	// --END--
    
    	// Lizenzabfrage - Erwartet Ja/Nein-Antwort
    	// --START--
    	string license;
    	cout << "Willkommen zu CINA (Computer based Intelligence Network Application)!\n";
    	cout << "Diese Software unterliegt der General Public License (GNU).\n";
    	cout << "Sie dürfen diese Software duplizieren, ändern und kommerziell nutzen,\n";
    	cout << "solange der Autor namentlich und im offiziellen Impressum genannt wird.\n";
    	cout << "Durch die Nutzung dieser Software erklären Sie sich mit diesen Beding-\n";
    	cout << "ungen einverstanden. Nichteinhaltung dieser Bedingungen wird Straf-\n";
    	cout << "rechtlich geahndet werden! Sind sie einverstanden? (j/n)\n>>> ";
    	while(license != "j" && license != "n") { getline (cin, license); }
    	// --END--
    
    	// Begrüßung (0001-0002)
    	// --START--
    	char filename0001[255] = "file0001.txt";
    	genrandfileout(filename0001);
    	char filename0002[255] = "file0002.txt";
    	genrandfileout(filename0002);
    	cout << endl;
    
    	// Namensabfrage (0003-0004)
    	// --START--
    	string param0001[] = {"hi","hey","hoi","tach","auch","hallo","guten","tag","morgen","mittag","abend","mahlzeit","also","mich","ich","heiße","mein","name","ist","werden","werde","genannt","man","nennt","mich","nenn","bin","nenne","würde","gerne","!",".",","," " };
    	size_t found;
    	string strusername;
    	string temp;
    	int till = 1;
    	int set;
    	char filename0003[255] = "file0003.txt";
    	char filename0004[255] = "file0004.txt";
    	char filename0005[255] = "file0005.txt";
    	char filename0006[255] = "file0006.txt";
    	genrandfileout(filename0003);
    	cout << endl << ">>> ";
    	getline (cin, strusername);
    	temp = UpToLow(strusername);
    	while(till==1) { for(int i=0; i<35; i++)
    	{ 
    		found=temp.find(param0001[i]);
     		if (found!=string::npos)
     		{
     			till = 1;
     			set = 1;
    			strusername.replace(temp.find(param0001[i]),param0001[i].length(),"");
    			temp.replace(temp.find(param0001[i]),param0001[i].length(),"");
     		} else {
     			if(set!=1) { till = 0; }
     		}
    	} set = 0; }
    	if(strusername == "")
    	{
    		genrandfileout(filename0006); cout << endl;
    		strusername = "Nutzer";
    	} else {
    		genrandfileout(filename0004); cout << " " << strusername << "!" << endl;
    	}
    	// --END--
    	while(returnending != 1)
    	{
    		genrandfileout(filename0005); cout << endl << ">>> ";
    		getline (cin, inputdefault);
    		if(InSentence(inputdefault, "beenden") == 1) { returnending = 1; }
    	}
    
    	return 0;
    }
    

    Bitte nicht über die Qualität auslassen, bin halt noch Anfänger ;)...

    Also das Problem ist: Im Abschnitt "Namensabfrage" sollte eigentlich der Benutzername abgefragt werden. Wirds auch. Bevor ich heute an dem Script gearbeitet habe, ging auch alles noch wunderbar, nur jetzt gehts nichtmehr.

    Die Zeile, nach der das Script augenscheinlich stoppt:

    getline (cin, strusername);
    

    Also der letzte Teil, in dem generiert wird "zufälliger Text, Benutzername, Ausrufezeichen (Zeile:

    genrandfileout(filename0004); cout << " " << strusername << "!" << endl;
    

    ) wird einfach nichtmehr angezeigt. Hat einer eine Idee, woran das liegen könnte? Danke schonmal für alle Hilfe 🙂



  • Sehr gut, dass da ne Lizenz dran ist... 🙄



  • Ich hab halt spaß an sowas 😃 Ist auch eigentlich eher ein Lückenfüller, da kommt dann noch ein kleiner Erklärungstext und sowas hin der länger ist aber dafür war ich noch zu faul



  • nicht nur die lächerliche lizenz (bei so nen problemen sollte man ohnehin nur relevanten code posten, sonst passierts ganz schnell, dass sich das ma niemand anguckt ^^) sondern is ja auch noch so, dass man mit 'nein' auch weiter kommt xD

    bb



  • Das ist dann ja mal ne gute Abfrage. Sind sie einverstanden? Nein. Egal, geht trotzdem weiter. 😃



  • ich sage doch is bis jetzt nur lückenfüller 😉



  • Kann sich bitte, bitte mal jemand die Stelle im Code angucken 😞 Ich suche jetzt schon fast 4 Stunden lang und es treibt mich langsam echt total in die Verzweiflung



  • unskilled schrieb:

    bei so nen problemen sollte man ohnehin nur relevanten code posten, sonst passierts ganz schnell, dass sich das ma niemand anguckt

    Ist das ausdrücklich genug?



  • Das Problem war ja das ich nicht wusste was relevant war, weil ich ja nich wusste wo der fehler lag... Aber ich habs jetzt gefunden, ich hab meine For-Schleife ein Element zuviel im Array durchzählen lassen und schon hatte alles nichtmehr geklappt...



  • Mefisto schrieb:

    ...ich hab meine For-Schleife ein Element zuviel im Array durchzählen lassen und schon hatte alles nichtmehr geklappt...

    Wie sagte ein sehr kompetenter Kollege mal so schön: "In 90% der Fehlerfälle nimmt man einen zuviel oder einen zuwenig...."

    Wenn Du Dir das zuherzen nimmst, findest Du das nächste Mal schneller die relevanter Stelle .... oder direkt den Fehler.

    Gruß von

    Simon2,

    dem der Code auch zu lang und mit zuviel mebensächlichem Kram (hast Du wirklich geglaubt, dass der Fehler im Lizenzcode liegen könnte ?) vollgepackt war.



  • Zwei kleine Anmerkungen zum Lizenztext ;):

    cout << "Willkommen zu CINA (Computer based Intelligence Network Application)!\n";
        cout << "Diese Software unterliegt der General Public License (GNU).\n";
        cout << "Sie dürfen diese Software duplizieren, ändern und kommerziell nutzen,\n";
        cout << "solange der Autor namentlich und im offiziellen Impressum genannt wird.\n";
        cout << "Durch die Nutzung dieser Software erklären Sie sich mit diesen Beding-\n";
        cout << "ungen einverstanden. Nichteinhaltung dieser Bedingungen wird Straf-\n";
        cout << "rechtlich geahndet werden! Sind sie einverstanden? (j/n)\n>>> ";
    

    Die "GNU General Public License" wird mit "GPL" abgekürzt. Und vielleicht solltest du doch eher die MIT-Lizenz oder was ähnlich weniger restriktives als die GPL wählen 😉



  • Mefisto schrieb:

    Das Problem war ja das ich nicht wusste was relevant war, weil ich ja nich wusste wo der fehler lag...

    Und dann denkst du, die anderen wissen, wo der Fehler liegt? Wir müssten deinen Code auch von vorne bis hinten durchgehen. Verständlich, dass hier nicht alle die Lust und Zeit dafür haben. Du hingegen kennst deinen Code (mal abgesehen davon, dass es sowieso deine Aufgabe ist, Fehler zu suchen).

    Bei solchen Dingen ist der Debugger ein sehr effizientes Hilfsmittel. Benutz ihn doch einfach, indem du den Code schrittweise durchgehst, Haltepunkte setzt und Variablen zur Laufzeit auf ihre Werte überprüfst.

    Du solltest dir für die Zukunft vornehmen, wirklich nur den relevanten Code zu posten. Das heisst, die Stellen, bei denen du dir sicher bist, kannst du schon einmal weglassen. Ansonsten musst du dich nicht wundern, wenn dir nicht geholfen wird...



  • Badestrand schrieb:

    Zwei kleine Anmerkungen zum Lizenztext ;):

    cout << "Willkommen zu CINA (Computer based Intelligence Network Application)!\n";
        cout << "Diese Software unterliegt der General Public License (GNU).\n";
        cout << "Sie dürfen diese Software duplizieren, ändern und kommerziell nutzen,\n";
        cout << "solange der Autor namentlich und im offiziellen Impressum genannt wird.\n";
        cout << "Durch die Nutzung dieser Software erklären Sie sich mit diesen Beding-\n";
        cout << "ungen einverstanden. Nichteinhaltung dieser Bedingungen wird Straf-\n";
        cout << "rechtlich geahndet werden! Sind sie einverstanden? (j/n)\n>>> ";
    

    Die "GNU General Public License" wird mit "GPL" abgekürzt. Und vielleicht solltest du doch eher die MIT-Lizenz oder was ähnlich weniger restriktives als die GPL wählen 😉

    dieser disclaimer ist sowieso vollkommen irrelevant. niemand kommt ins gefängnis, wenn er die GPL nicht einhält. außerdem ist nicht ein weiterführender hinweis auf den inhalt der GPL gegeben, was aber genau eine bedingung für die gültigkeit der GPL laut GPL ist.


Anmelden zum Antworten