免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3489 | 回复: 14
打印 上一主题 下一主题

[C] 请教一个面试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-17 20:09 |只看该作者 |倒序浏览
面试题目是这样的

“回文题,设计函数判断字符串是否为回文,ABCDEDCBA,同时要清除空格和Tab字符”

一时没有头绪 请教各位。。。。。。
请指点。。。。。

论坛徽章:
0
2 [报告]
发表于 2010-08-17 20:22 |只看该作者
是清除空格和Tab后判断是否为回文吧。
是清除两端的空格还是字符串中间的空间也要清除?

论坛徽章:
0
3 [报告]
发表于 2010-08-17 21:00 |只看该作者
回复 2# davelv


    应该是第一种。。。。。。

论坛徽章:
0
4 [报告]
发表于 2010-08-17 21:05 |只看该作者
去掉两端空格有trim函数。至于判断是否回文,一个循环,两个指针分别指向字符串开头和结尾,比较指针内容,相同则指针往中间靠拢,直到两指针之差<=1,不同则跳出。

最后判断两个指针之差是否<=1,是的话就说明是中间跳出的,则不是回文;否的话,则是回文。

论坛徽章:
0
5 [报告]
发表于 2010-08-17 21:07 |只看该作者
先去掉空格和回车,可以这么弄:
  1. void cl_blank(char * str)
  2. {
  3.         int i, j;
  4.         for (i = j = 0; ;) {
  5.                 while (str[j] && (str[j] == ' ' || str[j] == '\t'))
  6.                         ++j;
  7.                 if (!str[j]) {
  8.                         str[i++] = 0;
  9.                         break;
  10.                 }
  11.                 str[i++] = str[j++];
  12.         }
  13. }
复制代码
然后接着判定是否是回文,这个相对会比较容易点,这里提供一种解法:
  1. int palindrome(char *str)
  2. {
  3.         int i, j;
  4.         for (i = 0, j = strlen(str) - 1; i < j; ++i, --j)
  5.                 if (str[i] != str[j])
  6.                         break;
  7.         return i >= j;
  8. }
复制代码
以上仅供参考

论坛徽章:
0
6 [报告]
发表于 2010-08-17 21:19 |只看该作者
回复 5# daybreakcx


    回文的判断到中间就行,不管字符串长度是奇数还是偶数都直接除2,strlen用的也多余,删除空格和\t时就能顺便统计出来,要不用strlen还得再遍历一边

论坛徽章:
0
7 [报告]
发表于 2010-08-17 21:26 |只看该作者
回复  daybreakcx


    回文的判断到中间就行,不管字符串长度是奇数还是偶数都直接除2,strlen用的也 ...
iamxmz 发表于 2010-08-17 21:19



    额~~回文我也是到中间结束啊,从两头到中间,你确定字符串长度多余吗,不知道字符串的尾部你的中间怎么定义的,当然,字符串的长度可以通过删除空格和回车的时候返回,我只是写两个函数意思一下而已

论坛徽章:
0
8 [报告]
发表于 2010-08-17 21:39 |只看该作者
回复 4# davelv


    谢谢指点思路。。。。。。

论坛徽章:
0
9 [报告]
发表于 2010-08-17 21:41 |只看该作者
额~~回文我也是到中间结束啊,从两头到中间,你确定字符串长度多余吗,不知道字符串的尾部你的中 ...
daybreakcx 发表于 2010-08-17 09:26 PM



    我还是觉得你写的比他说的那样好。。。。。。。。。。。。

论坛徽章:
0
10 [报告]
发表于 2010-08-17 21:57 |只看该作者
现在一看算法就头疼。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP