Задача 1
Строки
chars[i]=ch;
freq[i] +=1;
не верны. Вам необходимо использовать:
int index = ch - 'a';
freq[index] += 1;
Задача 2
Индекс в цикле for
для печати данных также неверен.
Вам необходимо использовать:
for (char lower = 'a'; lower <='z'; lower++)
{
int index = lower - 'a';
cout << "\nLetter" << lower << "is " << freq[index] << "times";
}
Важное примечание
Стоит отметить, что стандарт C ++ не гарантирует, что строчные буквы являются достоверными. (Спасибо @MartinBonner). Например, если ваша система использует кодировку EBCDIC , ваша программа не будет работать.
Чтобы сделать ваш код устойчивым, будет лучше использовать std::map
.
int main()
{
srand(time(0));
int i, num;
char ch;
char chars[]={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
std::map<char, int> freq;
// Initialize freq.
for ( ch : chars )
{
freq[ch] = 0;
}
cout << "How many letters do you want in your string? ";
cin >> num;
for (i=0; i < num; i++)
{
ch = chars[rand()%26];
freq[ch] +=1;
}
for (auto item : freq )
{
cout << "\nLetter" << item.first << "is " << item.second << "times";
}
}