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

例如,句子"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;
}


 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值