| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 977 人关注过本帖
标题:别人给了一个回文字符串的判断源程序,有三句不太明白~请指教!
只看楼主 加入收藏
crz03128
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-5-22
收藏
 问题点数:0 回复次数:5 
别人给了一个回文字符串的判断源程序,有三句不太明白~请指教!
#include<stdio.h>
#include<string.h>
void main()
{char a[20];
char *q,*p;
printf("input the string:");
gets(a);
p=a;
q=a+strlen(a)-1;  /*为什么要减一?*/
while(p!=q&&q-p!=1&&*p++==*q--);/*while和if这两句不明白,希望能解释一下,越清楚越好,谢谢~~*
if(p==q||q-p==1)printf("YES\n");
else printf("NO\n");
}
搜索更多相关主题的帖子: 文字 指教 判断 
2007-06-12 23:11
gxl1127
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-6-12
收藏
得分:0 

字符串是以\0结尾的,也叫结束符或空字符.
如:字符串 hello
虽然它只有5个字符,在内存中却需要占用6字节存储,即strlen对字符串hello求出的值是6,所以要-1

至于while和if语句,我也没看明白,请高手指点吧.谢谢!

2007-06-12 23:33
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
如果a[]中放的是 "adjk",a+strlen(a)-1就刚好上'k'的地址了,自己举个例子不就清楚了

循环判断,p,q从字符串两端向中间移动,循环条件自然要求是p!=q,如果字符串基数长度就是q-p!=1

p==q||q-p==1说明p,q移动比较到结束都一直满足回文条件
2007-06-12 23:33
百年不亮
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:789
专家分:0
注 册:2006-4-14
收藏
得分:0 
strlen对字符串hello求出的值是6? 你用过strlen()没有,谁说要算"\0"的?

a+strlen(a)-1等价于&a[strlen(a)-1],想下数组下标是不是序号减一

[此贴子已经被作者于2007-6-12 23:44:05编辑过]

2007-06-12 23:37
langhua9528
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2007-5-27
收藏
得分:0 
因为q=a+strlen(a)是指向最后一位的下一位,减一是为了指向最后一位,a是首地址你自己算嘛
后面的没有看明白,不过就是判断对应的是否相等
2007-06-12 23:38
zhou
Rank: 1
等 级:禁止发言
帖 子:429
专家分:0
注 册:2006-6-16
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2008-03-30 17:39
快速回复:别人给了一个回文字符串的判断源程序,有三句不太明白~请指教!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020318 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved