1、问题描述:翻转句子的每一个单词,例如输入:I  am a student,输出为:student a am I。

2、思路:两步走:

(1)先总体翻转每一个字符;

(2)在翻转每一个单词。

3、代码以及测试如下:

#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
void reserve(char* pBegin, char* pEnd)
{
	if (nullptr==pBegin||nullptr==pEnd)
	{
		return;
	}
	
	while (pBegin<pEnd)
	{
		char tmp = *pBegin;
		*pBegin = *pEnd;
		*pEnd = tmp;
		++pBegin;
		--pEnd;
	}
}

void reserveSentence(char* pData)
{
	if (pData==nullptr)
	{
		return;
	}
	char* pBegin = pData;
	char* pEnd = pData;
	while (*pEnd!='\0')
	{
		++pEnd;
	}
	--pEnd;
	reserve(pBegin, pEnd);
	pBegin = pEnd = pData;
	while (*pBegin!='\0')
	{
		if (*pBegin==' ')
		{
			++pBegin;
			++pEnd;
		}
		else if (*pEnd==' '||*pEnd=='\0')
		{
			reserve(pBegin, --pEnd);
			pBegin=++pEnd;
		}
		else
		{
			++pEnd;
		}
	}
}

int main()
{
	char str[] ="i am a student!";
	reserveSentence(str);
	printf("%s\n", str);
	return 0;
}

输出:

 注意:测试不要用以下例子:因为该声明是在全局常量区开辟空间,地址对应的值不可修改!

const char* str="i am astudent";

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐