C语言判断回文字符串
有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。输入:字符串输出:Yes或者No说明:如输出Yes,说明输入的字符串是一个回...
有一种特殊形式的字符串,其正反序相同,被称为“回文字符串”。例如LeveL就是一个回文字符串。
输入: 字符串
输出: Yes或者No
说明: 如输出Yes,说明输入的字符串是一个回文字符串 输出No,说明输入的字符串不是一个回文字符串 请使用递归算法实现。
我的算法不知道哪里有问题,输入的回文串就是不显示结果。
希望在我的算法下找出我的错误 谢谢 展开
输入: 字符串
输出: Yes或者No
说明: 如输出Yes,说明输入的字符串是一个回文字符串 输出No,说明输入的字符串不是一个回文字符串 请使用递归算法实现。
我的算法不知道哪里有问题,输入的回文串就是不显示结果。
希望在我的算法下找出我的错误 谢谢 展开
展开全部
//你的错误在于递归调用的时候,i每次都是0,所以要用static int i = 0
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int hui(char a[10000])
{
int n;
static int i=0; //这里改为static int i = 0就对了,因为你递归调用i的时候每次都把i置为0了,那肯定不行的,因为你的i是在变得,所以用static
n=strlen(a);
if(i>=n-i-1)
return 1;
else
{
if (a[i]==a[n-i-1])
{
i++;
hui(a);
}
else
return 0;
}
}
int main(int argc, char *argv[])
{
char a[10000];
gets(a);
if (strlen(a)==0) {printf("No\n");}
else
{
if(hui(a))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int hui(char a[10000])
{
int n;
static int i=0; //这里改为static int i = 0就对了,因为你递归调用i的时候每次都把i置为0了,那肯定不行的,因为你的i是在变得,所以用static
n=strlen(a);
if(i>=n-i-1)
return 1;
else
{
if (a[i]==a[n-i-1])
{
i++;
hui(a);
}
else
return 0;
}
}
int main(int argc, char *argv[])
{
char a[10000];
gets(a);
if (strlen(a)==0) {printf("No\n");}
else
{
if(hui(a))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
追问
哦谢谢谢谢 我应该把inti=0写在函数外面的。
不过我是小白 static 在这里是什么作用啊,我从来没见过
追答
static 用于局部变量的时候 只会在第一次调用的时候执行,也就是说你后面每次调用的时候就不运行static int i = 0这句话了,比如你第一次调用了函数,会执行static int i=0这句话,当你i++之后,i变成了1,然后递归hui(a),再次执行的时候,static int i = 0这句话就不会执行了,i是从上次的1值开始了。
你也可以把i定义为全局变量
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询