分两步。
第一步:对字符串进行预处理,使得每个单词之间只存在一个空格。
第二部:反转两个字符串的位置。
#include <iostream>
#include <string>
using namespace std;
//多利用调试
//考虑情况要全面
int main()
{
string sen;
string phsen;//预处理后的字符串
string newsen;//反转后的新字符串
int flag = 0;
getline(cin, sen);
for (int i = 1; i < sen.size(); ++i) {
if (sen[i] == sen[i - 1]) {
if (sen[i] == ' ') {
;
}
else {
phsen.push_back(sen[i-1]);
}
}
else {
//考虑前面有空格的情况
//这个for导致最大值超时
for (int j = 0; j < i; ++j) {
if (sen[j] != ' ') {
flag = 1;//前面几项都为空格则flag=0,有一项不为space为1
}
}
if (flag == 1) {
phsen.push_back(sen[i - 1]);
}
}
//考虑最后结尾有空格的情况
if (i == (sen.size() - 1) && sen[i] != ' ') {
phsen.push_back(sen[i]);
}
}
//翻转反转两个字符串的位置
size_t length = phsen.size();
while (length--) {
if (phsen[length] != ' ' ) {
newsen.push_back(phsen[length]);
if (length == 0) {
size_t length3 = newsen.size();
while (length3--) {
cout << newsen[length3];
}
}
}
else {
if (sizeof(newsen) > 1) {
size_t length2 = newsen.size();
while (length2--) {
cout << newsen[length2];
}
cout << " ";
}
else {
if (newsen.size() == 1) {
cout << newsen << " ";
}
}
newsen.erase(0);
}
}
cout << endl;
return 0;
}
//现在对字符串进行预处理
最后一个不能解决,因为上面的判断在单词前面是否还有非空字符的for循环导致超时。