您的位置:首页 > 职场人生

[剑指offer][面试题42]翻转单词顺序 VS 左旋转字符串

2013-10-22 09:27 567 查看
题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串 "I am a student",则输出 "student.a am I " 。

题目二:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串 "abcdefg "和数字2,该函数将返回左旋转2位得到的结果 " cdefgab "。

#include <iostream>
using namespace std;

void reverseCore(char *pBegin, char *pEnd)
{
if (pBegin>=pEnd || pBegin==NULL || pEnd==NULL){
return;
}

while (pBegin<pEnd){
char c  = *pBegin;
*pBegin = *pEnd;
*pEnd   = c;

pBegin++;
pEnd--;
}
}

char* reverseSentence(char *str)
{
if (str==NULL){
return NULL;
}

int iLen = strlen(str);
if (iLen==0){
return NULL;
}

reverseCore(str, str+iLen-1);

char *pBegin = str;
char *pEnd   = str;
while (pEnd<str+iLen){
if (*pEnd==' '){
reverseCore(pBegin, pEnd-1);
pEnd++;
pBegin = pEnd;
}
else{
pEnd++;
}
}

return str;
}

void printSentence(char *str)
{
if (str!=NULL){
while (*str!='\0'){
cout<<*str;
str++;
}

cout<<endl;
}
}

int main()
{
char str[] = "I am a student.";
printSentence(str);

char *pRev = reverseSentence(str);
printSentence(pRev);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: