将一句话里的单词进行逆置,标点符号不逆置

e.g   "university of  electronic science and technology of china“  单词逆置为”china of technology and science  electronic of university“

void func(const char * pStr)
{
	char *p1 = const_cast<char *> (pStr);
	int iLen = strlen(p1);
	char *p2 = p1 + iLen - 1;  //指向最后一个字符
	//将整个字符串进行逆置
	char temp;
	while (p1 < p2)
	{
		temp = *p1;
		*p1 = *p2;
		*p2 = temp;
		++p1;
		--p2;
	}
	//对每个单词逆置(复原)
	p1 = const_cast<char *> (pStr);
	int iCount = 0;
	char * pStart;
	char * pEnd;
	while (*p1 != '\0')
	{
		if (*p1 == ' ') //遇到空格
		{
			pStart = p1 - iCount;  //指向单词首位
			pEnd = p1 - 1;         //指向单词末位
			while (pStart < pEnd)  //逆置每个单词
			{
				temp = *pStart;
				*pStart = *pEnd;
				*pEnd = temp;
				++pStart;
				--pEnd;
			}
			iCount = 0;  //计数清零
		}
		else
		{
			++iCount;  //计数
		}
		++p1;
	}

	//处理最后一个单词
	pStart = p1 - iCount;  //指向单词首位
	pEnd = p1 - 1;         //指向单词末位
	while (pStart < pEnd)  //逆置每个单词
	{
		temp = *pStart;
		*pStart = *pEnd;
		*pEnd = temp;
		++pStart;
		--pEnd;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值