笔试题目

//写一个函数,将字符串翻转,翻转方式如下:“I am a student”反转成“student a am I”,不借助任何库函数。

据说这题在笔试或者面试当中,出现的频率非常高。刚好在书上也看到这题,又在博客园看到这题出现了(“发职位经典面试题”)。

作者也提示了,方法是先反转整个字符串,然后再反转字串。譬如先将“I am a student”反转为“tneduts a ma I”,然后再对每个字串(空格分割)反转一次。思想就那么简单吧。实现起来的话,我就有点凌乱了。C++没学好。伤不起。

算法

 1 #include <stdio.h>
 2
 3 void main()
 4 {
 5     char str[]="I am a student";

 7     printf(str);
 8     printf("\n");
 9
10     char *p,*q;
11     char temp;
12     p=q=str;14     while(*q!='\0')
15     {
16         q++;
17     }
18     q--;
19     while(p<=q)
20     {
21         temp=*p;
22         *p=*q;
23         *q=temp;
24         p++;
25         q--;
26     }//反转整个字符串
27
28     printf(str);
29     printf("\n");
30
31     q=str;//指针指向开始位置
32     char *s,*t;
33     s=t=str;
34     while(*q!='\0')
35     {
36         if(*q==' ')
37         {
38             t--;
39             while(s<=t)
40             {
41                 temp=*t;
42                 *t=*s;
43                 *s=temp;
44                 s++;
45                 t--;
46             }//反转局部字符串
47
48             s=q+1;
49             t=q;
50         }52         q++;
53         t++;
54     }
55
56     printf(str);
57     printf("\n");
58 }

改进

运行之后,我发现是成功的。

但是怎么想都感觉有点问题,把“I am a student”换成“you are a student”果然有问题。

没有处理最后一个字串的缘故。因为我是按照

if(*q==' ')

来处理字串的,而字符串最后一个的结尾没有空格了,而是以'\0'结尾的。

最后一个字串的处理我是这样做的。

if(*q==' '||*(q+1)=='\0'){t--;if(*(q+1)=='\0')//处理最后一个字串t++;

看上去有点奇怪吧,但是确实是可以了。

代码貌似可以继续优化吧。怎么都感觉自己写的代码好烂。

代码

以下是完整代码

已处理最后字串的完整代码

#include <stdio.h>void main()
{char str[]="you are a student";printf(str);printf("\n");char *p,*q;char temp;p=q=str;while(*q!='\0'){q++;}q--;while(p<=q){temp=*p;*p=*q;*q=temp;p++;q--;}//反转整个字符串
printf(str);printf("\n");char *s;q=p=s=str;//指针指向开始位置while(*q!='\0'){if(*q==' '||*(q+1)=='\0'){p--;if(*(q+1)=='\0')//处理最后一个字串p++;while(s<=p){temp=*p;*p=*s;*s=temp;s++;p--;}//反转局部字符串
s=q+1;p=q;}q++;p++;}printf(str);printf("\n");
}

另外给一个我在《程序员面试宝典》看到的代码,不过这个主要采用数组处理,而且使用了库函数(strlen()),但是思想差不多吧。可以参考参考。

《程序员面试宝典》实现方法
#include <iostram>
#include <stdio.h>int main(void)
{int num=-12345,j=0,i=0,flag=0,begin,end;char str[]="I am a student",temp;j=strlen(str)-1;printf(" string=%s\n",str);//第一步是进行全盘反转,将单词变成“tneduts a ma I”while(j>i){temp=str[i];str[i]=str[j];str[j]=temp;j--;i++;}printf(" string=%s\n",str);int i=0;//第二步进行部分反转,如果不是空格则开始反转单词while(str[i]){if(str[i]!=' '){begin=i;while(str[i]&&str[i]!=' '){i++;}i=i-1;end=i;}while(end>begin){temp=str[begin];str[begin]=str[end];str[end]=temp;end--;begin++;}i++;}printf(" string=%s\n",str);return 0;
}

既然看到了,就应该要思考吧。仅提升..

参考
《程序员面试宝典(第二版)》

开发职位经典面试题 http://www.cnblogs.com/zhangjing230/archive/2012/05/17/2505711.html

笔试题目“翻转字符串”的实现相关推荐

  1. php mysql笔试题_2017年最新PHP笔试题目及答案

    2017年最新PHP笔试题目及答案 为了帮助同学们面试PHP工程师,以下百分网小编整理的2017年最新PHP程序员笔试题目,希望对大家有所帮助,更多信息请关注应届毕业生网! 1.用php打印出前一天的 ...

  2. 百度 腾讯 阿里 小米 笔试题目宝典

     九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗笔试面试八十题 引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之前,自开博以来的21个月每月都不曾 ...

  3. 百度 阿里 腾讯 BAT笔试题目

     8月15日,百度2道面试题: 1.来自<编程之美>的概率题:一个桶里面有白球.黑球各100个,现在按下述规则取球:的     i .每次从通里面拿出来两个球:     ii.如果取出 ...

  4. 九度OJ 1525 子串逆序打印 -- 2012年Google校园招聘笔试题目

    题目地址:http://ac.jobdu.com/problem.php?pid=1525 题目描述: 小明手中有很多字符串卡片,每个字符串中都包含有多个连续的空格,而且这些卡片在印刷的过程中将字符串 ...

  5. 中国航信官笔试计算机基础,中国航信笔试题目

    中国航信笔试题目 收到中国航信的offer,立刻就据了,虽然很后悔,但是只能这样了,看来跟中航信无缘了.提供经验攒人品. 笔试挺简单的,就是50分的公务员考题和50分的技术类题目,全是选择题,公务员的 ...

  6. 算法--------翻转字符串里的单词(Java版本)

    题目: 给定一个字符串,逐个翻转字符串中的每个单词.示例 1:输入: "the sky is blue" 输出: "blue is sky the" 示例 2: ...

  7. C#与.NET程序员面试宝典 1.4.3 笔试(举例微软、雅虎笔试题目)

    笔试主要考察应聘者掌握基础知识的扎实程度,以及解决问题的思考方式.笔试是程序员应聘过程中最关键的.也是难度最大的一个环节.在激烈的求职竞争中,想顺利漂亮地完成笔试题目.躲过面试官布下的种种" ...

  8. linux常用shell命令面试,shell经典笔试题目总结

    shell经典笔试题目总结 守望者整理了一些高手的博客记录的shell面试题分享给大家,有些比较有意思,帮助大家面试或则学习shell编程的学习例子 一 文件内容如下: 100 a         1 ...

  9. leetcode 151. 翻转字符串里的单词

    难度:中等 频次:69 题目: 给你一个字符串 s ,逐个翻转字符串中的所有 单词 . 单词 是由非空格字符组成的字符串.s 中使用至少一个空格将字符串中的 单词 分隔开. 请你返回一个翻转 s 中单 ...

最新文章

  1. Linux加密和安全
  2. windows2003server下能安装的MSN
  3. CentOS7 升级 curl 支持 HTTP2 与 TLS 1.3
  4. C语言求一棵二叉树所有根到叶的路径(附完整源码)
  5. 技术情报局(笛卡尔树)
  6. 可以添加自定义的Select控件
  7. 建筑设计 - 概念设计 - 笔记:- 第一章
  8. 关于文件的工具类例子
  9. 天津市计算机网络应用大赛,2017年天津市中等职业学校“圣纳·新道杯”技能大赛计算机应用技术技能比赛在我校开赛...
  10. dnf韩服服务器维护中,DNF韩服官方居然自己在服务器上开了个“私服”深渊必掉史诗...
  11. php连接sql数据库的方法,php连接数据库_php连接数据库的四种方法
  12. 火影忍者ol服务器维护中,火影忍者ol3月31日更新了什么?维护到几点?新增神无毗桥模拟战...
  13. 计算100以内奇数和偶数的数量
  14. html简单登录页面代码
  15. An Underwater Image Enhancement Benchmark Dataset and Beyong
  16. z-index取值范围
  17. 四天搞懂生成对抗网络(二)——风格迁移的“精神始祖”Conditional GAN
  18. 微信小程序注册/登陆,若依后台获取token
  19. 个人简历的1000+篇文章总结
  20. 微信开发(微信公众号)

热门文章

  1. Shell练习-统计出每个IP的访问量有多少?
  2. vue 模仿今日头条demo
  3. 数据中心行业人士如何进行继续教育
  4. 《Ceph源码分析》——第1章,第5节RADOS
  5. 分享一个开源博客-Jackblog
  6. netscaler密码恢复
  7. 情境学习理论视野中的成人学习
  8. javamail.providers not found
  9. Tweaked Identical Binary Trees - Medium
  10. iOS数据持久化--归档