C# Hilfe bei Programm, welches Buchstaben aus einem eingegebenen Text zählt.



  • Hallo,

    ich habe ein Problem. Ich muss ein Porgramm schreiben welches die Buchstaben aus einem Text zählt, den man über die Konsole eingeben kann. Von dem Text sollen nur die ersten 150Zeichen verwendet werden. Es sollen auch deutsche Umlaute und Sonderzeichen gezählt werden und die Anzahl in einem Array gespeichert werden. Groß- und Kleinschreibung soll nicht unterschieden werden. Nach jedem Durchlauf soll auf die Frage "Möchten Sie nochmal?" j= nochmal oder n=nein das programm neu gestartet oder beendet werden.
    Die Ausgabe soll tabellarisch erfolgen und auch den hexadezimalen ASCII-Wert beinhalten.

    Ich hab mir gedacht, dass man den Text und die Anzahl der Buchstaben als Array definiert und die Buchstaben dann mit einer for-Schleife zählt?!

    die Ja/Nein Abfrage am Ende des Programmes wird sicherlich mit einer do-while-Schliefe realisiert.

    Nur hab ich 0 Ahnung wie ich die ganzen Informationen in einm ordentlichen Code anwenden kann.

    Ich bräuchte einfach mal ne Schleife, die Zeichen aus einer Eingabe zählt, damit ich sehe wie das funktioniert oder einen guten Tipp.

    Ich hab einfach mal den Code eingegeben mit dem ich angefangen hab, auch wenn er wohl ziemlich chaotisch ist.

    Über Hilfe würde ich mich sehr freuen. Danke.

    #include <stdio.h>
    #include <stdlib.h>
    #include <limits.h>
    
    int main()
    {
    	//Variablen
    	char Text [151];
    	int Zeichen [256], i;
    
    	//Ausgabe auf Bildschirm
    	do 
    	{
    	printf ("========================\n");
    	printf ("::                    ::\n");
    	printf ("::  Zeichenzaehler    ::\n");
    	printf ("::                    ::\n");
    	printf ("========================\n");
    	printf ("\n");
    
    	printf ("Bitte geben Sie den Text ein <max. 150 Zeichen>, dessen Zeichen gezaehlt werden\n");
    	printf("sollen:"),				scanf("%c", &Zeichen);
    
    	for (i=0; i<=256; i++)
    	{
    		scanf("%f", &Text[i]);
    	}
    	printf ("Anzahl der Zeichen:\n"), Text;
    	return 0;
    
    	}while ();	//Hier die Ja / Nein Bedingung um das Programm zu beenden
    				// oder zu wiederholen
    
    		return 0;
    }
    


  • Falsches Forum …



  • Dieser Thread wurde von Moderator/in dEUs aus dem Forum C# und .NET in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • ist aber nochmal ein Falsches Forum 🙂 das ist C 😃



  • in c++ wäre es einfach. im prinzip (ohne die zeichenbeschränkungen und ja/nein abfrage) könnte man eine tabellarische übersicht so machen

    #include <iostream>
    #include <iomanip>
    #include <string>
    #include <map>
    using namespace std;
    
    int main()
    {
        typedef map<char, size_t> char_count_type;
    
        char_count_type charOverview;
        string theText;
    
        cout << "Bitte Text eingeben\n";
        cin >> theText;
        for (size_t i = 0; i < theText.length(); ++i)
        	++charOverview[theText[i]];
    
        cout << "\nZeichen    |    ASCII    |    Anzahl\n";
        cout << "------------------------------------\n";
        for (char_count_type::const_iterator iter = charOverview.begin();
            iter != charOverview.end();
            ++iter)
        {
            cout << iter->first << "          |"
                << "0x" << setw(8) << setfill('0') << hex << static_cast<int>(iter->first) << "   |"
                << setw(3) << setfill('\0')<< iter->second << "       \n";
        }
    }
    


  • also entweder, es war wirklich c, oder:

    sonicknight schrieb:

    #include <stdio.h> //unnötig
    #include <stdlib.h> //printf (), scanf ()
    #include <limits.h> //unnötig
    

    Also:

    #include <cstdlib> //für C++, für C wäre deine Variante richtig
    

    sonicknight schrieb:

    int main()
    {
        //Variablen
        char Text [151]; //ok...
        int Zeichen [256], i; //hmm... würde signed int nehmen und i noch nicht hier deklarieren
    
        //Ausgabe auf Bildschirm
        do 
        {
        printf ("========================\n");
        printf ("::                    ::\n");
        printf ("::  Zeichenzaehler    ::\n");
        printf ("::                    ::\n");
        printf ("========================\n");
        printf ("\n");
    
        printf ("Bitte geben Sie den Text ein <max. 150 Zeichen>, dessen Zeichen gezaehlt werden\n");
        printf("sollen:"),                scanf("%c", &Zeichen);
    //was willst du da? lt msdn: c == "Single-byte character with scanf", nimm halt d
    
        
    //    for (i=0; i<=256; i++)
        for (size_t i=0; i != 255; ++i)
        {
            scanf("%f", &Text[i]); /*f == "double", nimm halt
    scanf("%150s", Text, 151);*/
        }
        printf ("Anzahl der Zeichen:\n"), Text;
        return 0; //das darf hier nicht hin, weil das programm hier sonst immer abgebrochen wird
        
        }while ();   //Hier die Ja / Nein Bedingung um das Programm zu beenden
                    // oder zu wiederholen
    
       return 0; //kannst du auch weglassen
    }
    
    //die header waren 1. veraltet und 2. hast du sie gar ne gebraucht
    #include <iostream>
    
    int main()
    {
    	std::string eingabe; //geht auch mit char aber string ist einfacher denke ich - vor allem sicherer bei der eingabe
    	size_t Zeichen[255]; /*1. warum 256? eigtl könnte man ja sehr viel weniger nehmen, aber ich nehm einfach ma nur 255, weil 0 eh nicht vorkommen kann
    2. in C++ nimmt man eigtl immer size_t zum zählen (ist nen signed int)*/
    
    	printf ("========================\n");
    	printf ("::                    ::\n");
    	printf ("::  Zeichenzaehler    ::\n");
    	printf ("::                    ::\n");
    	printf ("========================\n");
    	printf ("\n");
    //was hältst du von:
        std::cout << "==================================\n"
        << "==========ZEICHEN-ZAEHLER=========\n"
        << "==================================\n" << std::endl;
    
    char again ('y');
    	do 
    	{
    	std::cout << "Bitte geben Sie den Text ein, dessen Zeichen gezaehlt werden sollen. Beachten Sie dabei, dass nur die ersten 150 Zeichen berücksichtigt werden" << std::endl;
    //das geht auch direkt 
    std::cin >> eingabe;
    char temp[151];
    strcpy_s (temp, 151, eingabe.substr (1, 150).c_str ()); //151 weil das meineswissen das terminierungsbyte-einschließt
               while (*temp != '\0') //kannst auch != 0 schreiben, ist das gleiche
                {
                 ++zeichen[*temp++ -1];//weil ich ja nur 255 hab noch die -1
                };
    
    	for (size_t i (0); i != 255; ++i)
    	{
                std::cout << i << ": " << zeichen[i] << std::endl;
    	}
    std::cout << "noch mal? [y/n]" << std::endl;
    std::cin >> again;
    	} while (again == 'y');
    }
    

    bb

    edit: schade, zu langsam ^^


Log in to reply