【发布时间】:2015-10-02 13:03:30
【问题描述】:
我有一个关于我正在为练习编写的代码的问题。我必须检查一个字符串是否是回文。我无法更改函数的声明。该函数仅在所有字母相同时返回 1(如“aaaa”),但如果我用其他回文(如“anna”)对句子充电,则函数返回 0 ,我不知道为什么会出现这种情况。谢谢!
char* cargar (char*);
int pali (char*);
int main()
{
char*texto=NULL;
texto=cargar(texto);
int res=pali(texto);
if(res==1){printf("\nPalindrome");}
else printf("\nNot palindrome");
return 0;
}
char* cargar (char*texto)
{
char letra;
int i=0;
texto=malloc(sizeof(char));
letra=getche();
*(texto+i)=letra;
while(letra!='\r'){
i++;
texto=realloc(texto,(i+1)*sizeof(char));
letra=getche();
*(texto+i)=letra;}
*(texto+i)='\0';
return texto;
}
int pali (char* texto)
{
int i;
for(i=0;*(texto+i)!='\0';i++){
}i--;
if(i==0||i==1){return 1;}
if(*texto==*(texto+i)){
return pali(++texto);
}
else return 0;
}
【问题讨论】:
-
你有什么问题?
-
如果我输入 anna 之类的内容,函数返回 0,但 "anna" 是回文
-
有很多资源展示了这个问题的算法。这是一个 c - programmingsimplified.com/c-program-find-palindrome
-
我进行了搜索,但找不到任何使用唯一函数且递归的东西。此外,在不知道字符串长度的情况下
-
i--;移动到if(i==0||i==1){return 1;}之后。和*(texto+i) = 0;在return pali(++texto);之前插入。(这是一种破坏性算法。)
标签: c string recursion dynamic palindrome