H面试程序(4):翻转句子中单词的顺序 .
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
- #include<stdio.h>
- #include<assert.h>
- //45min
- void swap(char *a, char *b)
- {
- assert(a);
- assert(b);
- char temp;
- temp = *a;
- *a = *b;
- *b = temp;
- }
- void reverse(char * str,int start,int end)
- {
- assert(str);
- int j = (end-start)/2;
- for(int i =0; i<=j; i++)
- swap(&(str[start++]), &(str[end--]));
- }
- void ReverceSentence(char * Str)
- {
- assert(Str);
- int i = 0;
- while(Str[i] !='\0')
- {
- i++;
- }
- int strlen = i; //得到字符串的长度
- //整个字符串进行翻转
- reverse(Str,0,strlen-1);
- //每个单词进行翻转
- int j ;
- for(j = 0; j < strlen-1; j++) //最后一个那个'\0'不用管它
- {
- int start = j;//每个单词的起始位置
- int end = j; //每个单词介绍的位置,初始化为j(新单词起始的位置)
- while(Str[j] != ' '&&Str[j] != '\0' ) //遇到空格或结束符的时候退出,否则继续判断
- {
- end++;
- j++;
- }
- reverse(Str,start, end-1); //对单个字符进行翻转
- }
- }
- int main()
- {
- char sentence[]="I am a student!";
- ReverceSentence(sentence);
- printf("%s",sentence);
- printf("\n");
- return 0;
- }
网上参考答案
- #include <iostream>
- using namespace std;
- void Reverse(char *start,char *end) //翻转字符串
- {
- if(start==NULL||end==NULL)
- return;
- char temp;
- while(start<end)
- {
- temp=*start;
- *start=*end;
- *end=temp;
- start++;
- end--;
- }
- }
- char *ReverceSentence(char *pstr)
- {
- if(pstr==NULL)
- return NULL;
- //先将整个句子翻转
- char *start=pstr;
- char *end=pstr+strlen(pstr)-1;
- Reverse(start,end);
- start=pstr;
- end=pstr;
- //取出一个个单词,翻转之
- while(*start!='\0')
- {
- if(*start==' ') //单词起始至非空格字符
- {
- start++;
- end++;
- continue;
- }
- else if(*end==' '||*end=='\0') //结束至空格或结束符前一个字符
- {
- Reverse(start,--end);
- start=++end;
- }
- else
- end++;
- }
- return pstr;
- }
- int main()
- {
- char sentence[]="I am a student!";
- char *reverced=ReverceSentence(sentence);
- cout<<reverced<<endl;
- system("pause");
- return 0;
- }
- /*把给定的字符串的begin到end之间的部分翻转*/
- void _reverse(char *str, int begin, int end)
- {
- int i = 0;
- while(i <= (end - begin) / 2)
- {
- swap(str[begin + i], str[end - i]);
- ++i;
- }
- }
H面试程序(4):翻转句子中单词的顺序 .的更多相关文章
- 翻转句子中单词的顺序 C语言
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开. 为简单起见,标点符号和普通字母一样处理. 比如将"I am a student"转化为&q ...
- 7.翻转句子中单词的顺序[ReverseWordOrderInSentence]
[题目] 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“I am a student.”,则输出“stud ...
- IT公司100题-10-翻转句子中单词的顺序
问题描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“Hello world!”,则输出“world ...
- 【c++】计算句子中单词的平均长度
Description 编程输入一行文本,计算这行文本的单词平均长度.假设每个单词用至少一个空格或者标点(英文逗号.句号)隔开.使用C++ string类型. Input 输入一行文本,不包含数字 O ...
- OpenJudge计算概论-单词倒排【把句子内单词的顺序翻转】
/*================================================== 单词倒排 总时间限制: 1000ms 内存限制: 65536kB 描述 编写程序,读入一段英文 ...
- H面试程序(12): 输出字符串中第一个只出现一次的字母
题目描述: 若字符串str为'' sbdddsbfc'',则输出 f; 若字符串str为''aabbccdd'',则输出:字符串str中的字符都出现两次以上 #include <stdio.h& ...
- 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 ...
- H面试程序(28):字符串处理转换
//2 字符串处理转换 //问题描述: //在给定字符串中找出单词( “单词”由大写字母和小写字母字符构成, //其他非字母字符视为单词的间隔,如空格.问号.数字等等:另外单个字母不算单词): //找 ...
- (C#) 反转字符串,反转一个句子中单词。
这个是非常基本的一道面试题,但是要考虑周全. 首先反转一个字符串: 基本思路是变成Char数组,然后调用C#里面的方法,或者设定两个index,从头,尾向中间遍历,并交换. 方法一: Array.Re ...
随机推荐
- Java程序猿从笨鸟到菜鸟之(九十二)深入java虚拟机(一)——java虚拟机底层结构具体解释
本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在曾经的博客里面,我们介绍了在java领域中大部分的知识点,从最基础的java最基本的语法 ...
- 我的Python成长之路---第二天---Python基础(8)---2016年1月9日(晴)
数据类型之字典 一.字典简介 字典dict(dictionary),在其他语言中也成为map,使用键-值(key-value)的形式存储和展现,具有极快的查找速度. 字典的定义 d = {'key': ...
- Robot Framework与Web界面自动化测试学习笔记:定位到新窗口
在页面操作中,有时会需要打开新的窗口(新的网页不在当前窗口显示,而是在新的tab页显示), 比如利用 window.open("newurl") 或者 <a href=& ...
- 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 ...
- C#中ref参数及out参数对比
ref 关键字和out关键字均会导致参数通过引用来传递(相同点1).这是两者的共同点. 通过引用传递参数,会使方法中对参数所做的任何修改都将反映在该变量中. 两者还有一个共同点,那就是:若要使用 re ...
- Ch02 从零开始实例学习3
提纲:---------------------------- 演练2-3:添加控制器 知识点2-3:控制器的职责 知识点2-4:控制器的类别与方法 ------------------------- ...
- 在Windows下搭建C++11 编译环境(附下载,包括mingw-build,TDM-GCC, nuwen MinGW Distro)
由于现实的一些原因,并不是所有人都能很方便的享受到C++11 特性.特别是C++ Primer 第五版 和 The C++ Programming Language 第四版等全面C++ 11 铺开以后 ...
- 基于visual Studio2013解决面试题之1109全排列
题目
- php连接oracle及简单操作
使你的php支持oracle,按照以下步骤即可: 1.安装php环境,找一下appserv或者xampp,一键安装,很方便 2.把php的ext目录下的php_oci8.dll拷到system32目录 ...
- HDU 1425 sort 题解
选择出数列中前k个最大的数. 这里由于数据特殊.所以能够使用hash表的方法: #include <cstdio> #include <algorithm> #include ...