第十题
翻转句子中单词的顺序。
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。
例如输入“I am a student.”,则输出“student. a am I”。
分析:
可以根据空格符将单词分开,然后针对每个单词进行操作,string类型的有很多库函数,比如可以实现分割string类型的字符串。
这里使用c++实现,本来是想使用split函数进行分割的,但是MSDN上string对象成员函数http://msdn.microsoft.com/zh-cn/library/b873y76a%28v=vs.80%29
split函数示例运行不对,然后就采用查找空格来分割。希望有大牛指出split成员函数的问题。
代码如下:
#include<iostream>
#include<string>
using namespace std;
using std::string;
void reverseSequence(string & words)
{
int lengthWords = words.length();
if(0==lengthWords) return;
char temp;
//reverse all the words
for(int i =0; i < lengthWords/2; i++)
{
temp = words.at(i);
words.at(i) = words.at(lengthWords-1-i);
words.at(lengthWords-1-i) = temp;
}
//conduct statistics
int wordsNum = 0;
for(int i = 0; i < words.length(); i++)
{
if(words.at(i)==' ')
wordsNum++;
}
wordsNum = wordsNum + 1;
int *arrayLength = new int[wordsNum];
for(int i =0 ; i < wordsNum; i++)arrayLength[i] = 0;
int j = 0;
for(int i = 0; i < lengthWords; i++)
{
if(' '!=words.at(i))arrayLength[j]++;
else j = j + 1;
}
//reverse each words
int index;
int currentIndex = 0;
for(int i =0 ; i < wordsNum; i++)
{
index = currentIndex;
while(index<arrayLength[i]/2 + currentIndex)
{
temp = words.at(index);
words.at(index) = words.at(currentIndex+currentIndex+arrayLength[i]-1-index);
words.at(currentIndex+currentIndex+arrayLength[i]-1-index)=temp;
index++;
}
currentIndex = currentIndex + arrayLength[i] + 1;
}
}
int main()
{
string a = "i am a student";
for(int i=0;i<a.length();i++)cout<<a.at(i);
cout<<endl;
reverseSequence(a);
for(int i=0; i<a.length();i++)cout<<a.at(i);
cout<<endl;
return 0;
}
更多详细信息请查看
java教程网 http://www.itchm.com/forum-59-1.html
分享到:
相关推荐
[答案V0.2版]精选微软数据结构+算法面试100题[前20题]--修正 http://download.csdn.net/source/2813890 //第61-100题答案、思路,正在整理中。 更多资源,下载地址: http://v_july_v.download.csdn.net/谢谢。 ...
在准备IT行业的面试,尤其是针对微软这样的顶级科技公司时,数据结构和算法是绝对不可或缺的知识领域。这些题目通常用于评估候选人的逻辑思维能力、问题解决技巧以及对基础计算机科学概念的理解。下面,我们将深入...
根据提供的信息,我们可以总结出这份文档包含了从第41题到第60题的数据结构与算法面试题目。这些题目是从微软等知名公司的面试题目中精选出来的,并由原作者进行了整理和发布。以下是对这些题目的详细解读: ### 第...
### 1....以上四个问题的解决方案涵盖了从二元查找树到排序的双向链表转换、特殊栈的设计、求子数组的最大和以及在二元树中寻找特定和的路径等多个方面,涉及到了数据结构和算法的核心思想和技术细节。
此题目源自一份包含100个微软数据结构与算法面试题的文档,旨在帮助求职者准备相关面试。文档的版本号为V0.2,相比之前的V0.1版进行了修正和优化。文档提供了一个网址供读者反馈和讨论:`...
### 微软的数据结构与算法面试题解析 #### 一、链表反转算法实现 **题目描述**: 编写一个函数`List_reverse(List l)`,该函数用于反转单向链表。 **代码分析**: ```plaintext 1. List_reverse(List l) { 2. if...
根据给定的信息,本文将对两个具体算法面试题目进行详细解析,包括问题描述、解决方案以及相关的数据结构设计等内容。这两个题目分别是从二叉查找树转换为排序双向链表的问题,以及设计一个支持常数时间复杂度获取...
数据结构和算法是计算机科学的基础...以上就是对微软等公司数据结构和算法面试题的部分解析,实际面试中,深入理解和熟练应用这些知识是非常关键的。通过不断练习和学习,可以提高解决问题的能力,增加面试成功的几率。
本资料为“[答案修正]精选微软数据结构+算法面试100题.pdf”,重点讨论了如何将二叉查找树转化为一个排序的双向链表,且不新建任何节点。 #### 题目描述 给定一棵二叉查找树(Binary Search Tree, BST),要求将其...