Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С (для ИВТ) / Готовые лабы С / Лаба6 / Laba 6 (1)
.c#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
