字符串--5-翻转句子 student a am i

题目:

“student. a am I”,正确的句子应该是“I am a student.”。

思路

只需要对每个单词做翻转,然后再整体做翻转就得到了正确的结果。

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Solution
{
public:
	string reverseSentence(string &str)
	{
		if (str.size() <= 0)
		{
			return NULL;
		}
		str += " ";
		int mark = 0;
		//先对每个小子串翻转
		for (int i = 0; i < str.size() + 1; i++)
		{
			if (str[i] == ' ')
			{
				reverseWord(str, mark, i - 1);
				mark = i + 1;
			}
		}
		//再对整个字符串翻转
		str = str.substr(0, str.size() - 1);			//string 没有 str -= " ";
		reverseWord(str, 0, str.size() - 1);
		return str;
	}
private:
	string reverseWord(string &str, int begin, int end)
	{
		while (begin < end)
		{
			swap(str[begin++], str[end--]);
		}
		return str;
	}
};

int main()
{
	Solution s;
	string str = "student a am i";
	cout << s.reverseSentence(str) << endl;
	system("pause");
	return 0;
}

上述的输出结果为  i am a student
下述的结果为    iamastudent  去掉了空格


#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Solution
{
public:
	vector<string> reverseSentence(string str)
	{
		if (str.size() <= 0)
			return result;

		//扩展字符串方便操作,以免后面 .find()会返回 -1
		str += " ";
		//以空格区分子串,子串反转后存入result
		for (int i = 0; i < str.size(); i++)
		{
			int pos = str.find(" ", i);
				result.push_back(str.substr(i, pos - i));
				i = pos;
		}
		//将result翻转
		int begin = 0, end = result.size() - 1;
		while (begin < end)
		swap(result[begin++], result[end--]);

		return result;
	}
private:
	vector<string> result;
};

int main()
{
	Solution s;
	string str = "student a am i";
	vector<string> result = s.reverseSentence(str);
	for (int i = 0; i < result.size(); i++)
	{
		cout << result[i];
	}
	system("pause");
	return 0;
}

补充:

1、一般会扩展字符串,在后面加一个“ ”,方便操作

2、string的一些操作

        string str

        str.find("#");   从str第0个字符开始寻找,找到第一个后返回字符坐标

        str.find( "#", position );            从str第position个位置开始寻找,返回下标

        str.rfind( "#", position);            返回最后一个#的下标

        str.substr( start, count);         对于str, 从start位置开始截取count个子串。

猜你喜欢

转载自blog.csdn.net/ax_hacker/article/details/80848643