只有某些回文被写入文件
Only certain palindromes get written to file
我正在从事一个项目,该项目要求我从名为 'input.txt' 的文件中读取输入并读取
- 检查一个单词是否为回文,如果是则将其写入palindrome.txt
- 使用凯撒密码,移动13位写入cipher.txt
虽然第二部分似乎工作正常,但我遇到了一些回文未写入文件的问题,即使回文函数确实将它们识别为回文(单独测试)。我的 input.txt 测试文件包含以下文字:
madam quesadilla starman wow cheese racecar
同时 'madam' 和 '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;
}
您的 isPalindrome()
函数已损坏 — 它不会空终止字符串 t
。我在 main()
:
中调用 isPalindrome()
之前添加了一个简单的 printf()
语句
printf("word [%s] %d\n", str, isPalindrome(str));
当运行破解版时,我得到:
word [madam] 1
word [quesadilla] 0
word [starman] 0
word [wow] 0
word [cheese] 0
word [racecar] 0
word [beeb] 0
在isPalindrome()
中的循环之后,添加:
t[n] = '[=12=]';
则输出为:
word [madam] 1
word [quesadilla] 0
word [starman] 0
word [wow] 1
word [cheese] 0
word [racecar] 1
word [beeb] 1
我也遇到了崩溃,因为您的代码没有检查文件是否已成功打开。始终检查文件是否已成功打开。
我正在从事一个项目,该项目要求我从名为 'input.txt' 的文件中读取输入并读取
- 检查一个单词是否为回文,如果是则将其写入palindrome.txt
- 使用凯撒密码,移动13位写入cipher.txt
虽然第二部分似乎工作正常,但我遇到了一些回文未写入文件的问题,即使回文函数确实将它们识别为回文(单独测试)。我的 input.txt 测试文件包含以下文字:
madam quesadilla starman wow cheese racecar
同时 'madam' 和 '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;
}
您的 isPalindrome()
函数已损坏 — 它不会空终止字符串 t
。我在 main()
:
isPalindrome()
之前添加了一个简单的 printf()
语句
printf("word [%s] %d\n", str, isPalindrome(str));
当运行破解版时,我得到:
word [madam] 1
word [quesadilla] 0
word [starman] 0
word [wow] 0
word [cheese] 0
word [racecar] 0
word [beeb] 0
在isPalindrome()
中的循环之后,添加:
t[n] = '[=12=]';
则输出为:
word [madam] 1
word [quesadilla] 0
word [starman] 0
word [wow] 1
word [cheese] 0
word [racecar] 1
word [beeb] 1
我也遇到了崩溃,因为您的代码没有检查文件是否已成功打开。始终检查文件是否已成功打开。