面试经典(1)---翻转句子中单词的顺序

来源:互联网 发布:何兆武 知乎 编辑:程序博客网 时间:2024/05/16 12:53

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

例如输入“I am a student.”,则输出“student. a am I”。

由于本题需要翻转句子,我们先颠倒句子中的所有字符。这时,不但翻转了句子中单词的顺序,而且单词内字符也被翻转了。我们再颠倒每个单词内的字符。由于单词内的字符被翻转两次,因此顺序仍然和输入时的顺序保持一致。这个题目其实着重考察的逻辑思维,

void Reverse(char *pBegin, char *pEnd){if(pBegin == NULL || pEnd == NULL)return;while(pBegin < pEnd){char temp = *pBegin;*pBegin = *pEnd;*pEnd = temp;pBegin ++, pEnd --;}}char* ReverseSentence(char *pData){if(pData == NULL)return NULL;char *pBegin = pData;char *pEnd = pData;while(*pEnd != '\0')pEnd ++;pEnd--;Reverse(pBegin, pEnd);pBegin = pEnd = pData;while(*pBegin != '\0'){//跳过空格if(*pBegin == ' '){pBegin ++;pEnd ++;continue;}// A word is between with pBegin and pEnd, reverse itelse if(*pEnd == ' ' || *pEnd == '\0'){Reverse(pBegin, --pEnd);pBegin = ++pEnd;}else{pEnd ++;}}return pData;}


0 0
原创粉丝点击