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 vorgruss 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
