题目:
输入一个英文句子,反转句子中单词的顺序,但是单词内字符顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字幕一样处理。
分析:
首先反转句子,再逐个单词反转。
代码:
注意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;
}