Завдання 7 Дедлайн 27 листопада

З консолі вводять рядок малих латинських літер. Необхідно вивести в алфавітному порядку кожну унікальну літеру і скільки разів вона зустрічається в рядку.

Відповідь

В умові задачі нічого не сказано ні про довжину рядка, ні про те, що його потрібно зберігати. Це означає, що достатньо лише порахувати кількість входжень кожної літери. Для цього використаємо масив лічильників на 26 елементів (один на кожну літеру) і той факт, що як великі, так і малі літери латинського алфавіту мають послідовні цілочисельні значення.

#include <iostream>

int main() {
    // Всього є 26 латинських літер, тому потрібен масив на 26 елементів.
    // "26" можна написати як є, а можна обчислити як різницю між кодами
    // першого і останнього символів, плюс один.
    // Кожен елемент масиву - кількість входжень літери: для 'a' - елемент
    // з індексом 0, для 'b' - 1, і так далі до 'z' з індексом 25.
    const int size = 'z' - 'a' + 1;
    int count[size];
    // Занулюємо масив, оскільки зараз там "сміття".
    for (int i = 0; i < size; ++i) {
        count[i] = 0;
    }
    // Зчитуємо символи один за одним, доки не натрапимо на символ нового
    // рядка, що означатиме, що натиснули "Enter".
    for (char c = std::cin.get(); c != '\n'; c = std::cin.get()) {
        // Збільшуємо лічильник для зчитаної літери. Різниця між зчитаним
        // символом і 'a' - це індекс лічильника. Наприклад:
        // Зчитали 'a': 'a' - 'a' = 0
        // Зчитали 'b': 'b' - 'a' = 1
        // Зчитали 'z': 'z' - 'a' = 25
        ++count[c - 'a'];
    }
    // Виводимо літеру і через пробіл - кількість входжень, якщо вона не
    // дорівнює нулю. Тут для виведення літери також використовується
    // арифметика з char, тільки навпаки: щоб отримати літеру, додається
    // її різниця з 'a':
    // 'a' + 0 = 'a'
    // 'a' + 1 = 'b'
    // 'a' + 25 = 'z'
    for (int i = 0; i < size; ++i) {
        if (count[i]) {
            std::cout << char('a' + i) << ' ' << count[i] << std::endl;
        }
    }
    return 0;
}

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Максимальный размер загружаемого файла: 1 ГБ. Вы можете загрузить: изображение, аудио, видео, документ, таблица, интерактив, текст, архив, код, другое. Ссылки на YouTube, Facebook, Twitter и другие сервисы, вставленные в текст комментария, будут автоматически встроены. Перетащите файл сюда