Подсчёт гласных в строке на C и C++
В этом уроке вы посчитаете гласные в строке текста, не различая заглавные и строчные буквы.
Введение
Подсчёт гласных объединяет три навыка: перебор каждого символа строки, перевод символов в нижний регистр и проверку, входит ли символ в набор. Гласные в английском языке - это a, e, i, o и u.
Главное
- Включите предупреждения компилятора (compiler warnings) и исправьте их все.
- Хорошо понимайте тип и время жизни (lifetime) каждого значения.
- Всегда проверяйте входные данные и границы индексов массивов.
Примеры кода на C и C++
#include <ctype.h>
#include <stdio.h>
#include <string.h>
int main(void) {
const char *text = "Code Utility"; int count = 0;
// strchr performs a compact membership check.
for (; *text; ++text) if (strchr("aeiou", tolower((unsigned char)*text))) ++count;
printf("vowels=%d\n", count);
}
vowels=5
#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
int main() {
std::string text = "Code Utility";
// count_if counts characters accepted by the predicate.
auto vowels = std::count_if(text.begin(), text.end(), [](unsigned char c) {
return std::string("aeiou").find(std::tolower(c)) != std::string::npos;
});
std::cout << "vowels=" << vowels << '\n';
}
vowels=5
Сравнение C и C++
Функция tolower переводит каждый символ в нижний регистр, чтобы заглавные и строчные буквы обрабатывались одинаково. Перед передачей в tolower символ приводится к unsigned char, чтобы избежать проблем со специальными символами. Функция strchr("aeiou", ...) возвращает ненулевой указатель, если символ есть в строке гласных, и тогда счётчик увеличивается. В строке "Code Utility" 5 гласных.
C использует небольшие процедурные функции и открыто показывает, как данные представлены в памяти.
C++ по-прежнему позволяет работать на низком уровне, но добавляет библиотечные типы и более безопасные абстракции.
Упражнения для практики
Запустите обе версии, а затем измените код, чтобы увидеть разницу в безопасности, которую даёт каждый язык.
- Проверьте неверный ввод и граничные значения.
- Скомпилируйте с флагами -Wall -Wextra -Wpedantic, чтобы включить больше предупреждений.
- Вынесите общие объявления в заголовочный файл, а реализацию в отдельный файл.
Попрактикуйтесь на задаче
Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.
Все задачи