翻转单词顺序

Posted 玄苦大师233

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻转单词顺序相关的知识,希望对你有一定的参考价值。

题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字符一样处理。例如输入字符串"I am a student." 翻转后为"student. a am I"


方法:第一步翻转句子中的所有字符;第二步再翻转每个单词的顺序。

注意一个问题:

char *str = "abc",这个时候字符串"abc"是存储在常量区,所以这个时候字符指针不能对字符串常量做任何的修改

char str[] = "abc”,这个时候字符串存储在字符数数组中,不再是常量所以字符指针可以对字符数组进行修改


/*
注意
1. char *p = "abc",这个时候字符串"abc"为字符串常量不允许修改
2. 如果我们要翻转字符串必须把字符串存储到字符数组中
   char string[] = "abc",这个时候abc就不是字符串常量了可以修改
*/
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

//翻转单词
void ReverseWord(char *begin, char *end)
	if(begin == NULL || end == NULL)
	    return;
	
	//翻转
	while(begin < end)
        swap(*begin, *end);//交换两个位置的字符
		++begin;
		--end;
	


//翻转字符串句子
char *ReverseString(char *string)
	if(string == NULL) //空字符串
	    return NULL;
	
	//设置两个指针一个指向首地址一个指向最末尾
	int len = (int)strlen(string);
	char *begin = string;
	char *end = string+len-1;
	//翻转整个字符串
	ReverseWord(begin, end);
	//翻转单词
	begin = string;
	end = string;
        //枚举字符串句子把单词翻转过来
	while(*end != '\\0')
		//如果碰到了空格就把前面的单词翻转
		if(*end == ' ')
		    ReverseWord(begin, end-1); //注意这边是end-1
		    ++end;
		    begin = end;
		
		else 
		    end++;
		
	
	//最后把剩下的也翻转了
	ReverseWord(begin, end-1);
	return string;



以上是关于翻转单词顺序的主要内容,如果未能解决你的问题,请参考以下文章

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点 符号和普通字母一样处理

程序员面试50题—翻转句子中单词的顺序[算法]

翻转单词顺序

反转单词顺序 VS 左旋转字符串

剑指offer---翻转单词顺序

1205 单词翻转