Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.56 Кб
Скачать
#include <stdio.h>
#include <string.h>
#include <ctype.h>

// Функция для проверки, является ли символ буквой (латиница + кириллица)
int is_letter(char c) {
    // Латинские буквы
    if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) return 1;
    // Кириллические буквы (диапазоны кодов в Windows-1251)
    if ((unsigned char)c >= 192 && (unsigned char)c <= 255) return 1;
    return 0;
}

// Функция приведения к нижнему регистру для латиницы и кириллицы
char to_lower_case(char c) {
    // Латинские буквы
    if (c >= 'A' && c <= 'Z') return c + 32;
    // Кириллические заглавные буквы (А-Я)
    if ((unsigned char)c >= 192 && (unsigned char)c <= 223) return c + 32;
    return c;
}

int isPalindrome(char *str) {
    int len = strlen(str);
    int i = 0, j = len - 1;
    
    while (i < j) {
        // Пропускаем не-буквенные символы слева
        while (i < j && !is_letter(str[i])) i++;
        // Пропускаем не-буквенные символы справа
        while (i < j && !is_letter(str[j])) j--;
        
        if (i >= j) break;
        
        // Сравниваем буквы без учета регистра
        if (to_lower_case(str[i]) != to_lower_case(str[j])) {
            return 0; // Не палиндром
        }
        
        i++;
        j--;
    }
    return 1; // Палиндром
}

int main() {
    char input[1000];
    char processed[1000];
    int j = 0;
    
    printf("Enter a string (ended with dot): ");
    fgets(input, sizeof(input), stdin);
    
    // Обрезаем строку до точки
    char *dot_pos = strchr(input, '.');
    if (dot_pos != NULL) {
        *dot_pos = '\0';
    }
    
    // Удаляем лишние пробелы и оставляем только буквы
    for (int i = 0; input[i] != '\0'; i++) {
        if (is_letter(input[i]) || isspace(input[i])) {
            processed[j++] = input[i];
        }
    }
    processed[j] = '\0';
    
    printf("Processed string: \"%s\"\n", processed);
    
    if (isPalindrome(processed)) {
        printf("The string IS a palindrome (ignoring case, spaces and punctuation).\n");
    } else {
        printf("The string IS NOT a palindrome.\n");
    }
    
    return 0;
}
Соседние файлы в папке Лаба6