Probleme mit Asci Ausgabe



  • Hallo, ich hab mir ein programm geschrieben - das soweit funktioniert. Aber,

    ich möchte, dass mir das programm alle Buchstaben von A bis Z und a bis z eines textes zählt. Das pb ist nun, dass ich die ascii symbole in einer schleife einem array zugewiesen habe, aber zwischen z und A hat es noch zeichen, die ich nicht will, also muss ich doch die schlaufe unterteilen oder so, dass bei Z fertig ist und bei a wieder angefangen wird, oder?

    Weiss leider nicht, wie ich das machen soll...

    Hier noch der Code und ein output

    #include<iostream>
    
    int main ()
    {
      // Save ASCII Symbols from 'A' to 'z' into an array
      int n = 60;
      int k = 0;  // that we beginn with the cell buchstaben[0] 
      char* buchstaben = new char[n];          
    
     for (char c = 'A'; c<= 'z'; ++c){
          buchstaben[k]=c;                              
          ++k;                                
            }
    
      // Assign the array for cardinality of every occurence 
      int* counters = new int[n];           
      for(int i=0; i<n;++i)
        counters[i]=0;
    
      char tempcharwindow;                   // coming from window
    
      std::cin >> std::noskipws;
        while(std::cin >> tempcharwindow)
        {
          for(int j=0; j<n;++j){      
             if (tempcharwindow == buchstaben[j])
                  (counters[j]++); // counter considering temp is added
             else (counters[n]++); // got a symbol x, a>=x && x >= z 
             }
        }
    
     for (int l=0;l<n;++l)
         std::cout << buchstaben[l] << " kommt " << counters[l] << " mal vor.\n";
    
      return 0;
    }
    

    der output für einen text sieht bei mir dann so aus. 😡 zeilen sollten verschwinden:

    Ausschnitt:

    Y kommt 3 mal vor.
    Z kommt 0 mal vor.
    [ kommt 0 mal vor. 😡
    \ kommt 0 mal vor. 😡
    ] kommt 0 mal vor. 😡
    ^ kommt 0 mal vor. 😡
    _ kommt 0 mal vor. 😡
    ` kommt 0 mal vor. 😡
    a kommt 44 mal vor.
    b kommt 5 mal vor.
    c kommt 5 mal vor

    gruss hugo



  • zwischen Z und a liegen im ASCII-Code die Zeichen '[' '\' ']' '^' '_' '`' die fügst du in deine Arrays ganz am Anfang ein und gibst sie zum Schluss auch aus!



  • hi,
    wennes dir einfach machen willst, mach doch ne if abfrage vor der ausgabe, die abfragt, ob l>90&&l<97 ist, dann werden nur die gewollten zeichen ausgegeben.

    mfg Oermel



  • Mach einfach zwei Schleifen hintereinander (alternativ kannst du auch eine if-Abfrage einbauen):

    for (char c = 'A'; c<= 'Z'; ++c)
    {
      buchstaben[k]=c;
      ++k;   
    }
    for (char c = 'a'; c<= 'z'; ++c)
    {
      buchstaben[k]=c;
      ++k;   
    }
    

    Und "counters[n]++" solltest du rauswerfen, da du damit auf nicht allozierten Speicher zugreifst (dein Array counters akzeptiert nur die Indizes 0 bis n-1).



  • #include <iostream>
    #include <string>
    
    int main()
    {
    	char letters['Z' - 'A' + 'z' - 'a'];
    	for (std::size_t i(0); i < ('A' - 'Z'); ++i)
    		letters[i] = static_cast<char>(i + 'A');	
    	for (std::size_t i(0); i < ('a' - 'z'); ++i)
    		letters[i] = static_cast<char>(i + 'a');	
    
    	int counter[sizeof(letters) / sizeof(letters[0])] = { 0 };
    
    	std::cout << "String: " << std::flush;
    	std::string user_input;
    	std::getline(std::cin, user_input);
    	for (std::string::const_iterator it(user_input.begin()); it != user_input.end(); ++it)
    	{
    		if (*it >= 'A' && *it <= 'Z') ++counter[*it - 'A'];
    		else if (*it >= 'a' && *it <= 'z') ++counter[*it - 'a' + 'Z' - 'A'];
    	}
    
    	for (std::size_t i(0); i < ('Z' - 'A' + 'z' - 'a'); ++i)
    		std::cout << (i < 'Z' - 'A' ? (i + 'A') : (i - 'Z' + 'a')) << "\n";
    	std::cin.get();
    }
    

    ... da hast du es ohne den Heap zu nutzen 😛


Anmelden zum Antworten