【发布时间】:2023-11-15 21:50:01
【问题描述】:
这是我用 c 制作的回文检查器。它适用于所有输入,无论它们是否有标点符号,除非最后一项是标点符号。在这种情况下,它不会跳过它并进行比较,然后说它不是回文,而实际上它是。 EX(活过,魔鬼。不会是回文,而是活过,魔鬼会)。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <ctype.h>
#define max 180
bool is_palindrome(const char *message);
int main()
{
char message[max+1];
printf("Enter a message: ");
gets(message);
if(!*message)
{
printf("input error");
return 0;
}
if (is_palindrome(message)) printf("Palindrome\n");
else printf("Not a palindrome");
return 0;
}
bool is_palindrome(const char *message)
{
char *p, *p2;
bool palindrome = true;
p = message;
p2 = message;
for(;;)
{
while(*p)p++;
while(*p2)
{
while(!isalpha(*p)) p--;
while(!isalpha(*p2)) p2++;
if (toupper(*p) != toupper(*p2))
{
palindrome = false;
break;
}else
{
p--;
p2++;
}
}
break;
}
return palindrome;
}
【问题讨论】:
-
不要使用
gets。永远不要我们它。这是一个危险的函数,因此已从 C 标准中删除。可能改用fgets。 -
我一直在学习 K.N. 的 C 编程现代方法教科书。 King 所以这就是我选择该功能的原因,因为它用于读取整行。但很高兴知道以供将来参考,谢谢。
-
那我建议你扔掉那本书,去this list of good books看看。
-
至于你的问题,我建议你阅读 Eric Lippert 的How to debug small programs,并学习如何使用调试器逐行调试你的代码。
标签: c pointers c99 palindrome isalpha