此题是按单词翻转字符串
先将字符串全部翻转,再用空格确定每个单词的具体位置,将单词内部翻转回来。
/**
*Copyright @ 2019 Zhang Peng. All Right Reserved.
*Filename:
*Author: Zhang Peng
*Date:
*Version:
*Description:
**/
#include<iostream>
#include<string>
using namespace std;
void reverseCore(string & str, int start, int end)
{
if (start == end)
return;
while (start<end)
{
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
string reverse(string str)
{
string result = str.substr(0, str.size());
int len = result.size();
if (len == 0)
return result;
//翻转原字符串
reverseCore(result, 0, len - 1);
//字符串内部单词进行翻转
int start = 0;
for (int i = 0; i < len; i++)
{
if (result[i] == ' ')
{
reverseCore(result, start, i-1);
start = i + 1;
}
}
//对最后一个单词进行处理
reverseCore(result, start, len-1);
return result;
}
int main()
{
string str1 = "I love you!";
string result = reverse(str1);
cout << result << endl;
system("pause");
return 0;
}