一道面试题--翻转英文句子中的单词顺序

例如,句子"I miss you now"转为"now you miss I"。

思路是先将整个句子翻转过来,然后再将每一个单词重新翻转一次,便可以得出翻转单词顺序的效果。

代码示例:

 

void Reverse(char* pb , char* pe)	 //将某一段字符串翻转过来
{
	char *pl = pb , *pr = pe;

	while(pl!=pr&&pl&&pr)
	{
		char temp = *pl;	   //不能写成char * temp = pl;否则交换字符的操作失败
		*pl = *pr;
		*pr = temp;

		if(pl+1==pr)break;
		pl++;
		pr--;
	}

}

char * reverseSentence(char * pData)
{
	if(!pData)return NULL;

	char * pBegin = pData;
	char * pEnd = pData;

	while(pEnd&&*pEnd!='\0')pEnd++;
	pEnd--;
	Reverse(pBegin,pEnd);			  //整个句子翻转

	pBegin = pEnd = pData;

	while(pEnd&&*pEnd!='\0')			  //翻转每个单词
	{
		while(*pEnd!='\0'&&*pEnd!=' ')pEnd++;
		--pEnd;

		Reverse(pBegin , pEnd);

	    ++pEnd;
		while(*pEnd!='\0'&&*pEnd==' ')pEnd++;
		pBegin = pEnd;
	}

	return pData;
}


 

 

你可能感兴趣的:(面试)