Палиндром. Чтение из файла. Удаление знаков препинания - C (СИ)
Формулировка задачи:
Здравствуйте. Помогите исправить ошибку. Программа выполняет чтение из файла
предложения
, удаляет знаки препинания и получается одно длинное слово. Далее прог-мапроверяет его на палиндром
( палиндром слово читающееся одинаково в обоих направлениях) и выводит рез-т. Проблема в том,что результат проверки не верный.#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//проверка на палиндром----------------------------------------
int check (char str[])
{
int i,length;
length=strlen(str);
if (length==1) return 0;
for (i=0;i<length;i++)
if (str[i]!=str[(length-1)-i]) return 0;
return 1;
}
//конец проверки ----------------------------------------
int main()
{
char str[80];
FILE *file;
if ((file=fopen("test.txt","r"))==NULL) {
puts("File not found!");
return 1; }
char *mass;
mass = malloc(sizeof(char) * 1000);
fgets(str,80,file);
int i,j;
for(i = 0, j = 0; str[i]; ++i)
{
if((str[i] >= ' ' && str[i] <= '/') || (str[i] >= ':' && str[i] <= '\\')|| (str[i] >= ',' && str[i] <= '_'))
continue;
mass[j] = str[i];
j++;
}
printf("массив: %s\n", mass);
//---------------вызываем функцию проверки на палиндром
if (check(mass)==1)
printf (" \n Слово: %s Палиндром \n", mass);
else
printf("\n Слово: %s Не палиндром \n",mass);
//-------------------------------------------------------
free(mass);
return 0;
}Решение задачи: «Палиндром. Чтение из файла. Удаление знаков препинания»
textual
Листинг программы
if((str[i] >= ' ' && str[i] <= '/') || (str[i] >= ':' && str[i] <= '\\')|| (str[i] >= ',' && str[i] <= '_') || str[i] == '\n')
Объяснение кода листинга программы
- В условии используется оператор
или(||), который проверяет, удовлетворяет ли символ любому из трех условий. - Первое условие: str[i] >= ' ' && str[i] <= '/'. Сравниваются символы строки str, начиная с индекса i, с пробелом (' ') и знаком
/. Это означает, что в строке проверяются все символы от пробела до знака/. - Второе условие: str[i] >= ':' && str[i] <= '\'. Сравниваются символы строки str, начиная с индекса i, с знаком
:и знаком\. Это означает, что в строке проверяются все символы от знака:до знака\. - Третье условие: str[i] >= ',' && str[i] <= ''. Сравниваются символы строки str, начиная с индекса i, с запятой (',') и знаком `
. Это означает, что в строке проверяются все символы от запятой до знака_`. - Четвертое условие: str[i] == '\n'. Проверяется, равен ли символ строки str, начиная с индекса i, символу новой строки ('\n'). Это означает, что в строке проверяется сам символ новой строки.
- Если условие выполняется, то происходит удаление символа из строки. Как именно это происходит, не указано в предоставленном коде.