【题目】
https://leetcode-cn.com/problems/reverse-words-in-a-string-iii/
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
【代码】
// reverseWords.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <string>
#include <vector>
using namespace std;
string reverseWords(string s) {
int len = s.size();
vector<int> isblank;
for (int i = 0; i < len; i++) {
if (s[i] == ' ') {
isblank.push_back(i);
}
}
isblank.push_back(len);
for (int i = 0; i <= isblank[0]/2; i++) {
char temp = s[isblank[0] -1 - i];
s[isblank[0] - 1 - i] = s[i];
s[i] = temp;
}
for (int i = 1; i < isblank.size(); i++) {
for (int j = isblank[i - 1] + 1; j <= (isblank[i - 1] + isblank[i]) / 2; j++) {
char temp = s[isblank[i - 1] + isblank[i] - j];
s[isblank[i - 1] + isblank[i] - j] = s[j];
s[j] = temp;
}
}
for (int i = 0; i < len; i++)
printf("%c", s[i]);
return s;
}
int main()
{
string s("Let's take LeetCode contest");
string res = reverseWords(s);
return 0;
}
【总结】
1. 在反转第一个单词时犯了错误,i的上限设成了isblank[0]-1,导致反转了两次...失了智
2. pringt不能整体打印字符串