首页 > 代码库 > 【leetcode】Reverse Words in a String

【leetcode】Reverse Words in a String

问题:给定一个字符串,字符串中包含若干单词,每个单词间由空格分隔,将单词逆置,即第一个单词成为最后一个单词,一次类推。

说明:字符串本身可能包含前导空格或后导空格,单词间可能包含多个空格,要求结果中去掉前导和后导空格,单词间空格只保留一个。


与rotate函数类似,先逆置每个单词,再将所有字符串逆置。

 void reverseWords(string &s) {

	if(s.size() == 0) return;
	char blank = ' ';
	size_t len = s.size();
	size_t begin = s.find_first_not_of(blank);
	size_t end = s.find_last_not_of(blank);

	//erase(start,len);
	s.erase(end + 1, len - end);
	s.erase(0,  begin);

	string::iterator sit1 = s.begin();
	while (sit1 != s.end())
	{
		string::iterator cur = sit1;
		
		while(cur != s.end() && *cur == blank ){
			s.erase(cur);
		}
		//get 
		while(cur != s.end() && *cur != blank ) ++cur;
		reverse(sit1, cur);

		if(cur != s.end())
			++cur;
		sit1 = cur;
		   
	}

	reverse(s.begin(), s.end());
	return;
}