请编写函数fun,该函数的功能是:判断字符串是否为回文。若是,则函数返回1,主函数中输出YES,否则返回0,在主函数中输出NO。回文是指顺读和 倒读都是一样的字

chenyi602494282 2012-07-28 03:19:07
#include<stdio.h>
#define YES 1
#define NO 0
int main()
{
int m;

char fun(char b[m]);
char k;

char b[m]={'0'};
printf("m=%d",m);
scanf("%d",&m);
scanf("%s",b);
k=char fun(char b[m]);
return(k);
}
char fun(char a[n])
{
int i,j;
int n=0;
char a[n]={'0'};
printf("n=%d",n);
scanf("%d",&n);
scanf("%s",a);
for(i=0;i<=n;i++)
for(j=n;j>=0;j--)
if(a[i]==a[j])
return(1);
else
return(0);
}求指教
...全文
3323 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-07-28
  • 打赏
  • 举报
回复 1
[Quote=引用 2 楼 的回复:]

谢谢您没有直接给我代码
您说的那个思路我知道,我那样循环再比较也没错,只是函数方面我不太会用
所以。。。。。我是想别人帮我指出我那个程序的错误之处
[/Quote]

楼主那个fun错误很多:

char fun(char a[n]) // a[n]中的n不能是变量
{
int i,j;
int n=0; // n既然是通过参数传递进来的,为什么在这里又重新定义,这会覆盖传进来的n
char a[n]={'0'}; // n不能是变量
printf("n=%d",n);
scanf("%d",&n);
scanf("%s",a);
for(i=0;i<=n;i++) // 两个循环的含义要搞清楚。像这种写法除非所有的字符都是一样的,否则就不是回文了,所以肯定是错误的。
for(j=n;j>=0;j--)
if(a[i]==a[j]) // 比较的逻辑不正确。此处只要对称的两个位置相等了,你就判断其为回文,这不正确。
return(1); // 正确的逻辑是,所有的对称的位置上的字符都必须相等,方可判定其为回文。
else
return(0);
}


给你一个正确的写法参考吧:

#include <stdio.h>
#include <string.h>

int fun(char* str)
{
int i, k, length;
length = strlen(str);
k = length / 2;

for(i = 0; i < k; ++i)
{
if(*(str + i) == *(str + length - i - 1))
{
continue;
}
else
{
return 0;
}
}
return 1;
}

int main(int argc, char* argv[])
{
char* str = "1234567890987654321";
if(fun(str))
{
printf("YES\n");
}
else
{
printf("No\n");
}
return 0;
}
chenyi602494282 2012-07-28
  • 打赏
  • 举报
回复 1
谢谢您没有直接给我代码
您说的那个思路我知道,我那样循环再比较也没错,只是函数方面我不太会用
所以。。。。。我是想别人帮我指出我那个程序的错误之处
linguangliang 2012-07-28
  • 打赏
  • 举报
回复 1
//仅写代码给你没一点用,我给你讲讲思路
1.获得字符串长度(len = strlen(str))的一半midLen = len / 2;
2.利用midLen作为界限循环判断对称字符,如下
for(int i = 0; i < midLen; ++i)
{
if(str[i] != str[len-i-1])
return 0; //非回文
}
return 1; //回文
//主要代码已经给你了,自己在好好想想

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧