Zeichen von jeder Zeichenklasse ausgeben



  • Schreibe ein Programm das aus eine Textdatei einliest und ausgibt, wie viele Zeihen von jeder Zeichenklasse in der Datei vorhanden sind.

    #include "std_lib_facilities.h"
    
    int main()
    {
    	ifstream ifs("input.txt");
    	if (!ifs) error("Fehler in der eingabedatei!");
    
    	ifs.exceptions(ifs.exceptions() | ios_base::badbit);
    
        char ch;
    	while(ifs.getline(ch)) // Hier der Compiler Fehler
    	{
    		if (isspace(ch)) 
    		{
    			cout << ch << " ist ein Whitespace-Zeichen" << endl;
    		}
    		else if (isdigit(ch))
    		{
    			cout << ch << " ist eine dezimale Ziffer" << endl;
    		}
    		else if(isalpha(ch))
    		{
    			cout << ch << " ist eine Bezeichner" << endl;
    		}
    		else 
    		{
    			cout << ch << endl;
    		}
    	}
    }
    

    Die Compiler Fehler:

    IntelliSense: Keine Instanz von Überladene Funktion "std::basic_ifstream<_Elem, _Traits>::getline [mit _Elem=char, _Traits=std::char_traits<char>]" stimmt mit der Argumentliste überein. Zeile 11
    Fehler	1	error C2661: 'std::basic_istream<_Elem,_Traits>::getline': Keine überladene Funktion akzeptiert 1 Argumente  Zeile 11
    Fehler	2	error C1903: Weiterverarbeitung nach vorherigem Fehler nicht möglich; Kompilierung wird abgebrochen.	Zeile 11
    

    Die input.txt:

    1 + 4 * x <= y / z * 5
    2 - 3 / y > z * x / 9
    

  • Mod

    Du meinst get, nicht getline.



  • Ja du hast recht, wieder so ein tipp Fehler.

    Doch jetzt ein anderes Problem, es werden alle drei antworten ausgegeben obwohl es doch nur eins ausgeben soll.

    So etwas meine ich:

    1 ist eine dezimale Ziffer
      ist eine Bezeichner
    


  • Also für mich sieht es so aus, wie ich es erwarten würde (hier habe ich nur den Filestream weggelassen und cin verwendet). Die Leerzeichen und NewLines zwischen den Nutzzeichen werden allerdings auch gelesen und ergeben zwischendurch die "ist ein Whitespace"-Ausgaben.


  • Mod

    Hast du noch was verändert? Ich sehe nichts, was schiefgehen könnte und bei mir funktioniert's auch.



  • Jetzt ist alles klar, darum diese ausgaben.

    Die Code Korrektur:

    int main()
    {
    	ifstream ifs("input.txt");
    	if (!ifs) error("Fehler in der eingabedatei!");
    
    	ifs.exceptions(ifs.exceptions() | ios_base::badbit);
    
        char ch;
    	while(ifs.get(ch))
    	{
    		if (isspace(ch)) 
    		{
    			if (ch == ' ' || ch == '\n'){ cout << endl; }
    			else{
    				cout << ch << "-ist ein Whitespace-Zeichen" << endl;} 
    		}
    		else if (isdigit(ch))
    		{
    			cout << ch << "-ist eine dezimale Ziffer" << endl;
    		}
    		else if(isalpha(ch))
    		{
    			cout << ch << "-ist eine Bezeichner" << endl;
    		}
    		else 
    		{
    			cout << ch << endl;
    		}
    	}
    }
    

Anmelden zum Antworten