剑指offer------字符串------翻转单词顺序序列

题目

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?

思路

观察字符串变化规律,你会发现这道题很简单。只需要对每个单词做翻转,然后再整体做翻转就得到了正确的结果。

代码:

//先翻转单词后翻转整体
void RevStr(char *src)
{
	char *start = src,*end=src,*ptr=src;           //指向头部
	
	while(*ptr++ != '\0')   //遍历字符串    应为++后面-2
	{
		if(*ptr++ ==' '||*ptr=='\0')               //找到单词
		{
			end=ptr-1;
			//指向单词末尾
			while(start<end)
			
			swap(*start++,*end--);                 //单词逆序
			
			start=end=ptr+1;                       //指向下一个单词开头
		}
	}
	
	start =src,end=ptr-2;
	
	while(start<end)
	{
		swap(*start++,*end--);
	}
}

//先整体后单词
void RevStr(char *src)
{
	char *start = src,*end=src,*ptr=src;           //指向头部
	while(*ptr++ != '\0')   //遍历字符串    应为++后面-2
	{
		end=ptr-2;           //末尾字符
		
		while(start<end)          //翻转字符串
	{
		swap(*start++,*end--);
	}
	
	char *start = src,*end=src,*ptr=src; 
	
	while(*ptr++ != '\0')   //遍历字符串    应为++后面-2
	{
		if(*ptr++ ==' '||*ptr=='\0')               //找到单词
		{
			end=ptr-1;          //指向单词末尾
			while(start<end)
			
			swap(*start++,*end--);                 //单词逆序
			
			start=end=ptr+1;                       //指向下一个单词开头
		}
	}
	

猜你喜欢

转载自blog.csdn.net/qq_39503189/article/details/82664854
今日推荐