题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。

  1. #include<stdio.h>
  2. #include<assert.h>
  3. //45min
  4. void swap(char *a, char *b)
  5. {
  6. assert(a);
  7. assert(b);
  8. char temp;
  9. temp = *a;
  10. *a = *b;
  11. *b = temp;
  12. }
  13.  
  14. void reverse(char * str,int start,int end)
  15. {
  16. assert(str);
  17.  
  18. int j = (end-start)/2;
  19.  
  20. for(int i =0; i<=j; i++)
  21. swap(&(str[start++]), &(str[end--]));
  22. }
  23.  
  24. void ReverceSentence(char * Str)
  25. {
  26. assert(Str);
  27. int i = 0;
  28. while(Str[i] !='\0')
  29. {
  30. i++;
  31. }
  32. int strlen = i; //得到字符串的长度
  33.  
  34. //整个字符串进行翻转
  35. reverse(Str,0,strlen-1);
  36.  
  37. //每个单词进行翻转
  38.  
  39. int j ;
  40. for(j = 0; j < strlen-1; j++) //最后一个那个'\0'不用管它
  41. {
  42. int start = j;//每个单词的起始位置
  43. int end = j; //每个单词介绍的位置,初始化为j(新单词起始的位置)
  44. while(Str[j] != ' '&&Str[j] != '\0' ) //遇到空格或结束符的时候退出,否则继续判断
  45. {
  46. end++;
  47. j++;
  48. }
  49. reverse(Str,start, end-1); //对单个字符进行翻转
  50. }
  51. }
  52.  
  53. int main()
  54. {
  55. char sentence[]="I am a student!";
  56. ReverceSentence(sentence);
  57. printf("%s",sentence);
  58. printf("\n");
  59. return 0;
  60. }

网上参考答案

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void Reverse(char *start,char *end) //翻转字符串
  5. {
  6. if(start==NULL||end==NULL)
  7. return;
  8.  
  9. char temp;
  10. while(start<end)
  11. {
  12. temp=*start;
  13. *start=*end;
  14. *end=temp;
  15. start++;
  16. end--;
  17. }
  18. }
  19.  
  20. char *ReverceSentence(char *pstr)
  21. {
  22. if(pstr==NULL)
  23. return NULL;
  24.  
  25. //先将整个句子翻转
  26. char *start=pstr;
  27. char *end=pstr+strlen(pstr)-1;
  28. Reverse(start,end);
  29.  
  30. start=pstr;
  31. end=pstr;
  32.  
  33. //取出一个个单词,翻转之
  34. while(*start!='\0')
  35. {
  36. if(*start==' ') //单词起始至非空格字符
  37. {
  38. start++;
  39. end++;
  40. continue;
  41. }
  42. else if(*end==' '||*end=='\0') //结束至空格或结束符前一个字符
  43. {
  44. Reverse(start,--end);
  45. start=++end;
  46. }
  47. else
  48. end++;
  49. }
  50. return pstr;
  51. }
  52. int main()
  53. {
  54. char sentence[]="I am a student!";
  55. char *reverced=ReverceSentence(sentence);
  56. cout<<reverced<<endl;
  57. system("pause");
  58. return 0;
  59. }
  1. /*把给定的字符串的begin到end之间的部分翻转*/
  2. void _reverse(char *str, int begin, int end)
  3. {
  4. int i = 0;
  5. while(i <= (end - begin) / 2)
  6. {
  7. swap(str[begin + i], str[end - i]);
  8. ++i;
  9. }
  10. }

H面试程序(4):翻转句子中单词的顺序 .的更多相关文章

  1. 翻转句子中单词的顺序 C语言

    输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开. 为简单起见,标点符号和普通字母一样处理. 比如将"I am a student"转化为&q ...

  2. 7.翻转句子中单词的顺序[ReverseWordOrderInSentence]

    [题目] 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“I am a student.”,则输出“stud ...

  3. IT公司100题-10-翻转句子中单词的顺序

    问题描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“Hello world!”,则输出“world ...

  4. 【c++】计算句子中单词的平均长度

    Description 编程输入一行文本,计算这行文本的单词平均长度.假设每个单词用至少一个空格或者标点(英文逗号.句号)隔开.使用C++ string类型. Input 输入一行文本,不包含数字 O ...

  5. OpenJudge计算概论-单词倒排【把句子内单词的顺序翻转】

    /*================================================== 单词倒排 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,读入一段英文 ...

  6. H面试程序(12): 输出字符串中第一个只出现一次的字母

    题目描述: 若字符串str为'' sbdddsbfc'',则输出 f; 若字符串str为''aabbccdd'',则输出:字符串str中的字符都出现两次以上 #include <stdio.h& ...

  7. 557. Reverse Words in a String III 翻转句子中的每一个单词

    [抄题]: Given a string, you need to reverse the order of characters in each word within a sentence whi ...

  8. H面试程序(28):字符串处理转换

    //2 字符串处理转换 //问题描述: //在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成, //其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词): //找 ...

  9. (C#) 反转字符串,反转一个句子中单词。

    这个是非常基本的一道面试题,但是要考虑周全. 首先反转一个字符串: 基本思路是变成Char数组,然后调用C#里面的方法,或者设定两个index,从头,尾向中间遍历,并交换. 方法一: Array.Re ...

随机推荐

  1. Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释

    本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在曾经的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本的语法 ...

  2. 我的Python成长之路---第二天---Python基础(8)---2016年1月9日(晴)

    数据类型之字典 一.字典简介 字典dict(dictionary),在其他语言中也成为map,使用键-值(key-value)的形式存储和展现,具有极快的查找速度. 字典的定义 d = {'key': ...

  3. Robot Framework与Web界面自动化测试学习笔记:定位到新窗口

    在页面操作中,有时会需要打开新的窗口(新的网页不在当前窗口显示,而是在新的tab页显示), 比如利用  window.open("newurl") 或者  <a href=& ...

  4. Multiple bindings were found on the class path(转)

    Multiple bindings were found on the class path SLF4J API is designed to bind with one and only one u ...

  5. C#中ref参数及out参数对比

    ref 关键字和out关键字均会导致参数通过引用来传递(相同点1).这是两者的共同点. 通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中. 两者还有一个共同点,那就是:若要使用 re ...

  6. Ch02 从零开始实例学习3

    提纲:---------------------------- 演练2-3:添加控制器 知识点2-3:控制器的职责 知识点2-4:控制器的类别与方法 ------------------------- ...

  7. 在Windows下搭建C++11 编译环境(附下载,包括mingw-build,TDM-GCC, nuwen MinGW Distro)

    由于现实的一些原因,并不是所有人都能很方便的享受到C++11 特性.特别是C++ Primer 第五版 和 The C++ Programming Language 第四版等全面C++ 11 铺开以后 ...

  8. 基于visual Studio2013解决面试题之1109全排列

     题目

  9. php连接oracle及简单操作

    使你的php支持oracle,按照以下步骤即可: 1.安装php环境,找一下appserv或者xampp,一键安装,很方便 2.把php的ext目录下的php_oci8.dll拷到system32目录 ...

  10. HDU 1425 sort 题解

    选择出数列中前k个最大的数. 这里由于数据特殊.所以能够使用hash表的方法: #include <cstdio> #include <algorithm> #include ...