Я работаю над проектом, который требует, чтобы я прочитал ввод из файла с именем 'input.txt' и
- проверил, является ли слово палиндромом, если это так, запишите его в palindrome.txt
- с использованием шифра Цезаря, сдвиньте его на 13 мест и запишите его в cipher.txt
Хотя вторая часть, кажется, работает нормально, у меня есть проблемы с некоторыми палиндромами, которые не пишутся в файл, даже если функция палиндрома распознает их как палиндромы (проверено отдельно). Мой тестовый файл input.txt содержит следующие слова:
Мадам Кесадилья Старман Вау, сыр гоночный автомобиль
Пока 'Мадам' и 'racecar' правильно записываются в palindrome.txt, вау нет. Также пробовал с другим палиндромом 'beeb' , который также не был записан в файл. Как уже упоминалось, я считаю, что функция isPalindrome работает хорошо, хотя все слова input.txt также правильно изменены для cipher.txt (следовательно, слова не пропускаются полностью). В настоящее время потеряно относительно того, что могло быть причиной этой проблемы. Вот мой код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int isPalindrome(char str[])
{
char t[100];
int n = strlen(str);
for(int i=0; i<n; i++)
{
t[i] = str[n-i-1];
}
if(!strcmp(str, t))
{
return 1;
}
else
{
return 0;
}
}
char* cypher(char str[])
{
char *encrypted = malloc( sizeof(char) * 100);
int n = strlen(str);
for(int i=0; i<n; i++)
{
if(str[i] >= 65 && str[i] <= 90)
{
encrypted[i] = (str[i]+13-65)%26+65;
}
else if(str[i] >= 97 && str[i] <= 122)
{
encrypted[i] = (str[i]+13-97)%26+97;
}
}
return encrypted;
}
int main (void)
{
FILE *fin, *fpal, *fcip;
char str[32];
int ret;
char *encrypted;
fin = fopen( "input.txt", "r");
fpal = fopen( "palindrome.txt", "w");
fcip = fopen("cipher.txt", "w");
ret = fscanf( fin, "%s", str );
while(ret==1)
{
if(isPalindrome(str))
{
fprintf(fpal, "%s\n", str );
}
encrypted = cypher(str);
fprintf(fcip, "%s\n", encrypted);
free(encrypted);
ret = fscanf(fin, "%s", str );
}
fclose(fin);
fclose(fpal);
fclose(fcip);
return 0;
}