Problem beim auslesen eines zweidimensionalen char Arrays



  • Habe eine Funktion geschrieben die eigentlich die Anzahl eines bestimmten Buchstaben in einem Textdokument zählen soll.
    Aus einem mir unbekannten Grund bekomme ich aber immer das Ergebnis 0, auch wenn der Buchstabe mehrfach im Text vorkommt!
    Vielleicht kann mir jemand sagen warum das nicht funktioniert.

    Hier die bisherige Funktion:

    int CountLetter(char inp1[100]) {
    
    Start:
    
    	char cstring[256];
    	fstream f;
    	int Line = 1;
    	int i = 0;
    	int j = 0;
    	char inp2;
    	int Count = 0;
    	int k = 0;
    	int l = 0;
    
    	system("cls");
    
    	Line = countLines(inp1);
    
    	cout << Line << " Zeilen! \n";
    
    	if (Line <= 1) { Line = 1; }
    	else if (Line >= 1000) { 
    		cout << "Zu viele Zeilen! Verwenden Sie eine kleinere Datei! \n";
    		goto End;
    	}
    
    	char file[1000][256];
    
    	while (i < Line) {
    		f.getline(cstring, sizeof(cstring));
    
    		j = 0;
    
    		while (j < 256) {
    
    			file[i][j] = cstring[j];
    			j++;
    
    		}
    
    		i++;
    
    	}
    
    	system("cls");
    	cout << "Welches Zeichen möchten Sie Zählen? \n";
    
    	cin >> inp2;
    
    	if (cin.fail()) {
    		cin.clear();
    		cout << "Es gab ein Problem bei der Eingabe... \n Bitte Versuchen Sie es erneut! \n";
    		system("Pause");
    		goto Start;
    	}
    
    	while (k < Line) {
    
    		l = 0;
    
    		while (l < 256) {
    
    			if (file[k][l] == inp2) { Count++; }		// Warum wird das nie TRUE?
    
    			l++;
    		}
    
    		k++;
    
    	}
    
    	cout << "Das Zeichen '" << inp2 << "' kommt " << Count << " mal in der Datei vor! \n";
    
    End:
    
    	system("Pause");
    
    	return 0;
    
    }
    


  • Ich wollte eigentlich auch for-Schleifen verwenden, aber die haben aus irgendeinem grund nicht funktioniert ( Sie wurden beim Ausführen einfach komplett übersprungen). Deswegen die while-Schleifen.



  • Du öffnest keine Datei zum lesen. Wahrscheinlich macht das countLines() , aber wie soll der fstream f in CountLetter() davon erfahren?
    Wozu char -Arrays für Strings in C++?
    Wozu die künstlichen Größenbeschränkungen?
    Wozu zeilenweise lesen?
    goto ? Echt jetz?

    #include <cstdlib>
    #include <string>
    #include <fstream>
    #include <iostream>
    
    int main()
    {
    	std::cout << "Which file? ";
    	std::string filename;
    	std::cin >> filename;
    
    	std::cout << "Which character? ";
    	char ch_to_count;
    	std::cin >> ch_to_count;
    
    	std::ifstream is{ filename };
    
    	if( !is.is_open() ) {
    		std::cerr << '\"' << filename << "\" couldn't be opened for reading!\n\n";
    		return EXIT_FAILURE;
    	}
    
    	unsigned long long counter{ 0 };
    	int ch;
    
    	while( is && ( ch = is.get() ) != EOF ) {
    		if( ch == ch_to_count)
    			++counter;
    	}
    
    	std::cout << '\'' << ch_to_count << "\' appears " << counter << " times in \"" << filename << "\"\n\n";
    }
    


  • Laut Google gibt es auch die Varianten:

    #include <algorithm>
    
    std::string s = "Ein beliebiger Text";
    size_t n = std::count(s.begin(), s.end(), '_');
    

    oder auch:

    std::string to_count = "_";
    std::string strData = "Ein beliebiger Text";
    
    int count=0;
    for(size_t pos=0; (pos = strData.find(to_count, pos)) < strData.length()) 
    {
        pos += to_count.length();
        count++;
        // std::cout << pos << endl;
    }
    


  • Warum zählst in einem string und nicht gleich am istream ?



  • Swordfish schrieb:

    Warum zählst in einem string und nicht gleich am istream ?

    Für die vom TE gestellte Aufgabe macht das vermutlich Sinn; etwas Eigenleistung wäre aber nicht schlecht.


Log in to reply