C语言编程,用递归求回文字符串

#include<stdio.h>#include<string.h>#defineN50voidinput(chara[]){charc;inti;printf("请在... #include <stdio.h>
#include <string.h>
#define N 50
void input(char a[])
{
char c;
int i;
printf("请在下面输入字符串:\n");
for(i=0;i<N;i++)
{
scanf("%c",&c);
if(c=='q')
break;
while(c<'a'||c>'z')
scanf("%c",&c);
a[i]=c;
}
}
int fun(char a[],int length,int i)
{
if(i==length/2)
return 1;
if(a[i]!=a[length-i-1])
return 0;
fun(a,length,i+1);
}
int main()
{
char a[N];
int length;
int i=0;
input(a);
length=strlen(a);
printf("%d",length);
if(fun(a,length,i))
printf("yes\n");
else
printf("no\n");
return 0;
}

这有几个问题,一个是用strlen测出的长度为55是怎么回事,我定义的长度只有50啊,还有一个是我想在while(c<'a'||c>'z')这用(c<'a'||c>'z'||c<'A'||c>'Z')行不行
展开
 我来答
xoaxa
推荐于2017-11-27 · TA获得超过8612个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3508万
展开全部
#include <stdio.h>
#include <string.h>

#define N 50

void input(char a[]) {
char c;
int i;
printf("请在下面输入字符串:\n");
for(i = 0;i < N;i++) {
scanf("%c",&c);
if(c == 'q') break; // q to quit!
while(c < 'a' || c > 'z') scanf("%c",&c); // 只读入小写字母
a[i] = c;
    }
a[i] = '\0'; // 添加串结束符
}

int fun(char a[],int length,int i) {
if(i == length/2) return 1;
if(a[i] != a[length - i - 1]) return 0;
fun(a,length,i + 1);
return 1;
}

int main() {
char a[N];
int length;
int i=0;
input(a);
length = strlen(a);
// printf("%d",length);
if(fun(a,length,i)) printf("yes\n");
else  printf("no\n");
    return 0;
}
更多追问追答
追问
printf("%d",length)是我用来测试长度是不是正确的,测出来是55是怎么回事,我定义的最大长度都才50啊
追答
在函数input()中,没有给a[]添加'\0',那么在main()中的strlen(a)如何才能找到'\0'呢,这可是strlen()计数a字符个数的结束标志啊!
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式