C语言:编写一个测试一个串是否为回文的递归函数,是回文,返回1;不是,返回0。

编写一个测试一个串是否为回文的递归函数,是回文,返回1;不是,返回0。并在主函数调用该函数,判断输入的字符串是否为回文串。回文是正读和反读都一样的串。
输入:第一行为正整数N,表示有N组输入数据;每组输入对应一行,为一个字符串。
输出:每组输入对应一行输出,若输入的字符串是回文则输出“Yes!”,否则输出“No!”。

注意:用递归

样例输入

5
abccccbccccba
123454321
adsf fsda
hijkkjih
namemaa

样例输出

Yes!
Yes!
No!
Yes!
No!

#include <stdio.h>
int huiwen(char *s,int n)
{if(n<2)return 1;
 if(*s!=*(s+n-1))return 0;
 return huiwen(s+1,n-2);
}
int main()
{char s[200];
 int i,k;
 scanf("%d%*c",&k);
 while(k--)
 {gets(s);
  for(i=0;s[i];i++);
  printf("%s\n",huiwen(s,i)?"Yes!":"No!");  //运行完了才加上的"!"
 }
 return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-05-21

只给你写个核心代码吧

//判断一个长度为length的字符串str是否为回文
bool isPalin(const char* str, int length)
{
    if(length <= 1)
        return true;
    if(str[0] != str[length - 1])
        return false;
    return isPalin(str + 1, length - 1);
}

第2个回答  2015-05-21
#include <stdio.h>
#include <string.h>
int check( char *str, int len )
{
if ( len > 1 )
{
if ( *str!=*(str+len-1) )
{
return 0;
}
return check( str+1, len-2 );
}
else
return 1; 
}
void main()
{
int rep=0;
char str[100];
scanf("%d", &rep); getchar();
while( rep-- )
{
gets(str);
if ( check(str,strlen(str) ) == 1 )
printf("Yes!\n");
else
printf("No!\n");
}
}

本回答被提问者采纳
第3个回答  2018-02-28
//判断一个长度为length的字符串str是否为回文
bool isPalin(const char* str, int length)
{
    if(length <= 1)
        return true;
    if(str[0] != str[length - 1])
        return false;
    return isPalin(str + 1, length - 1);
}

相似回答