Упражнения по C/C++ для начинающих

Проверка палиндрома в C и C++

В этом уроке вы проверите, одинаково ли читается слово в обе стороны, сравнивая симметричные символы.

Введение

Палиндром - это строка, которая не меняется, если записать её символы в обратном порядке, например "level" или "radar". Чтобы это проверить, первый символ сравнивают с последним, второй с предпоследним и так до середины.

Главное

  • Включите предупреждения компилятора (compiler warnings) и исправьте их все.
  • Хорошо понимайте тип и время жизни (lifetime) каждого значения.
  • Всегда проверяйте входные данные и границы индексов массивов.

Примеры кода на C и C++

C
Запустить →
main.c
#include <stdio.h>
#include <string.h>
int main(void) {
    const char *text = "level"; size_t length = strlen(text); int palindrome = 1;
    // Compare characters mirrored around the center.
    for (size_t i = 0; i < length / 2; ++i)
        if (text[i] != text[length - 1 - i]) { palindrome = 0; break; }
    printf("%s is %sa palindrome\n", text, palindrome ? "" : "not ");
}
Результат выполнения
level is a palindrome
C++
Запустить →
main.cpp
#include <algorithm>
#include <iostream>
#include <string>
int main() {
    std::string text = "level";
    // equal compares the first half with a reversed view.
    bool palindrome = std::equal(text.begin(), text.begin() + text.size() / 2, text.rbegin());
    std::cout << text << " is " << (palindrome ? "" : "not ") << "a palindrome\n";
}
Результат выполнения
level is a palindrome

Сравнение C и C++

Циклу достаточно дойти до середины строки (length / 2), потому что каждую пару симметричных символов нужно проверить лишь один раз. Символ text[i] сравнивается с text[length - 1 - i]. Как только пара не совпадает, программа делает вывод, что это не палиндром, и выходит из цикла через break.

C

C использует небольшие процедурные функции и открыто показывает, как данные представлены в памяти.

C++

C++ по-прежнему позволяет работать на низком уровне, но добавляет библиотечные типы и более безопасные абстракции.

Упражнения для практики

Запустите обе версии, а затем измените код, чтобы увидеть разницу в безопасности, которую даёт каждый язык.

  • Проверьте неверный ввод и граничные значения.
  • Скомпилируйте с флагами -Wall -Wextra -Wpedantic, чтобы включить больше предупреждений.
  • Вынесите общие объявления в заголовочный файл, а реализацию в отдельный файл.

Попрактикуйтесь на задаче

Примените материал этого урока к реальной задаче. Каждая задача запускается в браузере, с мгновенными тестами и разбором от ИИ.

Все задачи