条件是:(这些是问题的一部分,所以我不能绕过它们(
- 我无法反转数组,因此strrev函数或编写反转函数毫无意义
- 我不能使用另一个数组将字母表复制到其中
- 字符串中有空格和逗号等,我在检查时必须忽略它们,但不允许我从字符串中删除它们
读到这篇文章后,我脑海中的方法就消失了,是的,我必须为此使用递归。
我只是想写一个函数:int回文(char arr[],int length(,返回一个标志=0/1应该做到这一点,但我很难弄清楚如何在不删除空白或逗号的情况下检查开头和结尾字符。有什么想法或暗示可以解决这种疯狂的问题吗?
它应该适用于以下内容:
- 中午
- 坐在土豆锅上,奥蒂斯
int palindrome(char arr[], int length);
使用此签名,您可以丢弃字符串开头和结尾的字符,而无需更改字符串本身:
要丢弃第一个字符,请增加指针:
palindrome(arr + 1, length - 1);
要丢弃最后一个字符,请减小长度:
palindrome(arr, length - 1);
现在想想回文的递归定义;像这样的东西:
- 如果第一个或最后一个字符不是字母,请将其扔掉,并检查其余字符是否为回文
- 如果第一个和最后一个字符是字母,请将它们进行比较
- 相等?把它们扔掉,检查子字符串是否是回文
- 不平等?不是回文
您必须小心地实现逻辑;这只是一个大概的想法。