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 ...
随机推荐
- mysql如何开启远程连接
链接地址:http://jingyan.baidu.com/article/046a7b3ed85f3ef9c27fa9dc.html 大家在公司工作中,经常会遇到mysql数据库存储于某个人的电脑上 ...
- QTableWidget 导出到csv表格
跳槽到了新的公司,开始苦逼的出差现场开发,接触到了新的应用.有很多应用需要将Table导出成表格,可以把table导出成csv格式的文件.跟大伙分享一下: lass TableToExcle : pu ...
- Android 播放声音
public static void PlayAlarmRing(Context mContext) { Uri alert = RingtoneManager.getDefaultUri(Ringt ...
- ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法
ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,Lo ...
- docker学习笔记5:利用commit命令创建镜像 和 删除本地镜像
一.概述 创建镜像有两种方法,一是用commit命令,二是用dockerfile方法(这个更常用,在下面文章介绍).本章介绍commit方法. 在介绍commit命令前,我们先回顾下对代码的版本控制, ...
- Linux下搭建Hadoop集群
本文地址: 1.前言 本文描述的是如何使用3台Hadoop节点搭建一个集群.本文中,使用的是三个Ubuntu虚拟机,并没有使用三台物理机.在使用物理机搭建Hadoop集群的时候,也可以参考本文.首先这 ...
- Android 之SparseArray<E>详解
SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch) pr ...
- 一张图说清Asp.NET MVC中的 RenderPage、RenderBody、RenderSection
- QObject,有一个生存线程(慢慢体会)
moveToThread本来就是操作QObject的 比如把当前对象移到主线程里: myObject->moveToThread(QApplication::instance()-> ...
- 基于visual Studio2013解决C语言竞赛题之1042字符串比较
题目 解决代码及点评 /********************************************************************** ...