题目:
输入一个英文句子,反转句子中单词的顺序,但是单词内字符顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字幕一样处理。
分析:
首先反转句子,再逐个单词反转。
代码:
注意while循环中对指针的操作;
注意const在此处的用处;程序员面试题100题第21题——左旋转字符串
char* ReverseString(char * const pStart, char * const pEnd)//反转字符串 { char *pS=pStart; char *pE=pEnd; if(pS != NULL && pE != NULL) { char temp; while(pS <= pE) { temp=*pS; *pS=*pE; *pE=temp; pS++; pE--; } } return pStart; }
char* ReverseSentence(char* const pSentence) { if(pSentence==NULL) { return NULL; } char* pBegin=pSentence; char* pEnd=pSentence; char* pTemp=pSentence; while(*pEnd != '\0')//注意*号 最容易遗漏* { pEnd++; } pEnd--;//注意 ReverseString(pBegin, pEnd); pBegin=pSentence; pEnd=pSentence; while(*pBegin != '\0')//*pBegin 最容易遗漏* { if(*pBegin ==' ')//开始为空格 { pBegin++; pEnd++; continue; }else if(*pEnd == ' ' ||*pEnd =='\0') { ReverseString(pBegin, --pEnd); pBegin=++pEnd; }else{ pEnd++; } } return pSentence; }