我有一个程序应该通过字符串识别可能的回文,检查它是否是回文然后从palindromelength()
返回长度,如果不是则返回-1,并打印出最长的回文结构的字符串。
该程序正在编译,但输出错误。
这是我的代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int palindromelength(char *str, int i, int j){
char *start = str;
char *end = str + j;
while(start < end){
if(*start != *end)
return -1;
start++;
end--;
}
return j-i+1;
}
void ispalindrome(char *str){
int length = 1, max = 1, start =0, i, j;
for(i=0; i<= strlen(str) -2; i++){
for(j= 1; j <= strlen(str)-1; j++){
if(abs(i-j) > 1){
length = palindromelength(str, i, j);
if( length> max){
max = length;
start = i;
}
}
}
}
if(max > 1){
printf("Largest palindrome is ");
for( ; start <= j; start++){
printf("%c", str[start]);
start++;
}
}
else
printf("No palindromes in string.");
}
int main(void) {
char a[50];
char *a2;
printf("Enter a string\n");
scanf("%[^\n]", a);
int length = strlen(a) + 1;
a2 = (char*)malloc(length*sizeof(char));
strcpy(a2, a);
free (a2);
char *a3 = &a;
ispalindrome(a3);
return 0;
}
我已经用一个简单的字符串分别尝试了palindromelength()
,&#34; aracecar&#34;。 palindrimelength(a3, 0, 4)
返回-1,这是正确的,palindromelength(a3, 0, 3)
返回3,这是正确的,但palindromelength(a3, 1, 7)
返回-1,这是错误的。我在堆栈溢出时仔细检查了我的函数和其他问题,看起来是对的,可能是什么问题?
至于第二个函数ispalindrome()
是否有更好的方法来编写那个函数?这看起来有点混乱。
我是新手,因此我可能还没有学到一些更高级/更复杂的变化,我可以采取这些来解决这个问题。
答案 0 :(得分:0)
我假设int i是字符串的起始索引,而int j是结束索引。如果是这样,请仔细查看palindromelength()函数的第一行。函数是否可以从索引0以外的某个地方开始?
至于执行ispalindrome()函数的方法,有很多算法来检查输入是否是回文,我建议你去看看并找出不同的方法。如果你的方式有效,太好了!可能最干净的方法是使用递归,虽然这可能需要一些思考。