我一直在研究潜在的面试问题,其中一个就是用C编写一个函数来检测给定的字符串是否是回文.
我已经有了一个很好的开端:
#include <stdio.h>
#include <stdbool.h>
bool isPalindrome(char *value);
bool isPalindrome(char *value)
{
if (value == null)
return false;
char *begin = value;
char *end = begin + strlen(value) - 1;
while(*begin == *end)
{
if ((begin == end) || (begin+1 == end))
return true;
begin++;
end--;
}
return false;
}
int main()
{
printf("Enter a string: \n");
char text[25];
scanf("%s", text);
if (isPalindrome(text))
{
printf("That is a palindrome!\n");
}
else
{
printf("That is not a palindrome!\n");
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我现在想确保忽略空格和标点符号.
考虑到我上面编写的代码,在遇到标点符号/空格时向前或向后推进指针的最佳方法是什么?
将循环更改为
while(begin < end) {
while(ispunct(*begin) || isspace(*begin))
++begin;
while(ispunct(*end) || isspace(*end))
--end;
if(*begin != *end)
return false;
++begin;
--end;
}
return true;
Run Code Online (Sandbox Code Playgroud)