翻转句子中单词的顺序 【微软面试100题 第十题】

来源:互联网 发布:程序员经常去的网站 编辑:程序博客网 时间:2024/06/04 20:00

题目要求:

  输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。

  例如:输入"I am a student.",则输出"student. a am I".

  参考资料:剑指offer第42题。

题目分析:

  1.实现一个翻转函数;

  2.先翻转整个句子,再翻转句子中的每个单词。

代码:

#include <iostream>using namespace std;char *reverseSentence(char *p);int main(void){    char a[] = "I am a student.";    cout << "原句子:" << a << endl;    reverseSentence(a);    cout << "翻转后的句子:" << a << endl;    return 0;}void reverse(char *s,char *e){    if(s==NULL || e==NULL)        return ;    while(s<e)    {        char temp = *s;        *s = *e;        *e = temp;        s++;        e--;    }}char *reverseSentence(char *p){    if(p == NULL)        return NULL;    char *begin = p;    char *end = p;    while(*end != '\0')        end++;    end--;    reverse(begin,end);    begin = end = p;    while(*begin != '\0')    {        if(*begin == ' ')        {            begin++;            end++;        }        else if(*end==' ' || *end=='\0')        {            reverse(begin,--end);            begin = ++end;        }        else            end++;    }    return p;}


0 0
原创粉丝点击