Robię takie zadanie:
Napisać program, który pobiera z klawiatury ciąg znaków podawanych przez użytkownika, aż do momentu naciśnięcia klawisza . (kropka) (i ENTER). Następnie utworzyć dwa histogramy występowania poszczególnych liter (wielkich i małych) alfabetu angielskiego. Każdy histogram powinien zawierać wyłącznie informacje o literach, które występują co najmniej raz w ciągu wejściowym. Kolejność przedstawienia liter w histogramach powinna odzwierciedlać kolejność pierwszego pojawienia się poszczególnych liter w ciągu wejściowym.
Dla przykładowego ciągu wejściowego c12A##AZCCC*#CZZbbd?@ZZZAAd53ddccZZAZZddd. wynik działania programu mógłby wyglądać następująco:
A ##### 5
Z ########## 10
C #### 4
c ### 3
b ## 2
d ####### 7
Pomoc: Kod ASCII znaku wczytywanego z klawiatury można uzyskać za pomocą metody get wywołanej na rzecz obiektu cin, czyli cin.get() zwraca wczytywany znak w formie liczby typu int.
I mam problem ponieważ program nie wyświetla popranych danych dla wszystkich wartości.
#include <iostream>
#include <cstdio>
using namespace std;
void histogram(char *a){
for(int i=0; i<100; i++){
a[i] = cin.get();
if(a[i]=='.'){
break;
i=99;
}
}
int duze[26];
int male[26];
int val=0;
for(int i=0; i<27; i++){
duze[i]=0;
male[i]=0;
}
for(int i=0; i<100; i++){
if(a[i]>='A' && a[i]<='Z'){
val=a[i]-'A';
duze[val]++;
cout << a[i] << ", " << duze[val] << endl;
}else if(a[i]>='a' && a[i]<='z'){
val=a[i]-'a';
male[val]++;
cout << a[i] << ", " << male[val] << endl;
}
val = 0;
}
char znakD='A';
char znakM='a';
for(int i=0; i<27; i++){
if(duze[i]!=0){
cout<<"Duze "<< znakD++ <<" : "<<duze[i]<<endl;
}
}
for(int i=0; i<27; i++){
if(male[i]!=0){
cout<<"Male "<< znakM++ <<" : "<<male[i]<<endl;
}
}
}
int main()
{
cout<<"aeg"<<endl;
char tab[100];
for(int i=0; i<100; i++){
tab[i]=0;
}
char *a = tab;
histogram(a);
return 0;
}