Char in einem Text suchen



  • Hi, bin eine Anfängerin. Habe schon versucht etwas über FAQ zu erfahren komme aber damit nicht weiter. Habe auch versucht die anderen Beiträge zu durchsuchen, bin aber nicht fündig geworden.

    Ich will ein char in einem Text suchen. Mein Programm schreibt bisher die Eingabe des Benutzers in eine Datei und gibt sie dann wieder aus. Wie kriege ich das nun hin, das in diesem Text ein bestimmtes Zeichen gesucht wird und ausgegebn wird wie oft es vorhanden ist?

    int character='l';
       char *string="Hallo ihr";
    

    So würde er suchen oder? gilt das auch für einen länger Text wo er das Ende nicht kennt und wie gebe ich aus, wie oft z.B. das "l" im Text ist?

    Hoffe ihr könnt mir helfen.
    Danke schonmal im vorraus. 🙂



  • strchr hilft für diesen Fall, dann darfst Du selbst nachzählen; das würde aber in C vermutlich niemand so machen, besonders weil eine Funktion, die selbiges macht ~3 Zeilen hat[1].
    [Für std::string könnten die find-Methoden und der Algorithmus Namens count (mit all seinen Verwandten) interessant werden.]

    [1]:

    unsigned f(int c, char const *p) {
       unsigned u = 0;
       while (*p) if (*p++ == c) ++u;
       return u;
    }
    


  • Um ehrlich zu sein, verstehe ich das nicht.Kannst du es nochmal für kleine Dummies erläutern?



  • unsigned f(int c, char const *p) { 
       unsigned u = 0; 
       while (*p) if (*p++ == c) ++u; 
       return u; 
    }
    

    er durchsucht .. den Zeiger p auf den Inhalt c

    u ist der zeichenzähler.

    solange p nicht \0 hat zählt er jedesmal u hoch wenn p=c und setzt den Zeiger eins weiter

    u wird zurückgegeben



  • Hilfe2003 schrieb:

    int character='l';
       char *string="Hallo ihr";
    
    #include <algorithm>
    #include <string>
    
    char character = '1';
    std::string str = "Hallo ihr";
    unsigned num = std::count(str.begin(), str.end(), character);
    


  • Ich habe es probiert, hat aber nicht geklappt.
    Also habe ich es mit strstr gemacht. Jetzt funktioniert es, aber wenn das gesuchte Zeichen in einem Wort zweimal vorkommt, dann findet er es nur einmal. Warum?

    #include <fstream>
    #include <iostream>
    #include <string>
    using namespace std;
    
    void main() {
    
    	string text;
    	char Zeichen[50];
    	int z;
    
    	//Öffnet die Datei new.txt.
    	ofstream OutFile("Test.txt");
    
    	//Gibt etwas Text in die Datei aus.
    	cout << "Geben Sie Text ein, der in die Datei 'Test.txt' geschrieben werden soll.\n";
    	getline(cin, text);
    	OutFile << text;
    
    	//fragt, nach welchem Zeichen gesucht werden soll
    	cout << "Nach welchem Zeichen soll gesucht werden?";
    	cin >> Zeichen;
    
    	//Schließe nun die Datei.
    	OutFile.close();
    
    	//Jetzt öffnen wir eine Datei zum Lesen.
    	ifstream InFile;
    
    	//Richte einen Puffer zum Einlesen des Textes
    	//ein.
    	char p[50];
    	InFile.open("Test.txt");
    
             z=0;
    
    	//Lies, solange der Input reicht.
    	while (!InFile.eof()) {
    		//Lies die Datei Wort für Wort ein. Um Wörter zu
    		//lesen, brauchen wir nicht aufs Dateiende zu
    		//überprüfen.
    		InFile >> p;
    		cout << p << " ";
    		if (strstr(p, Zeichen))
    		z = z+1;
    	}
    	cout << "Das gewaehlte Zeichen befindet sich " << z << " Mal in dem eingegebenen Text\n";
    
    }
    

    Ich weiß ist ein komischer Code, aber so funktioniert es ja fast und ich verstehe es wenigstens ein bisschen.

    P.s.: Danke für die Hilfe. 👍



  • Probiers mal so:

    z = std::count(std::istream_iterator<char>(InFile), std::istream_iterator<char>(), Zeichen);


Anmelden zum Antworten