题目描述
给定一段英文文章片段,由若干单词组成,单词间以空格间隔,单词下标从0开始。
请翻转片段中指定区间的单词顺序并返回翻转后的内容。
例如给定的英文文章片段为"I am a developer",翻转区间为[0,3],则输出“developer a am I”。
String reverseWords(String s, int start, int end)
输入描述
使用换行隔开三个参数
- 第一个参数为英文文章内容即英文字符串
- 第二个参数为待翻转内容起始单词下标
- 第三个参数为待翻转内容最后一个单词下标
输出描述
翻转后的英文文章片段所有单词之间以一个半角空格分隔进行输出。
备注
英文文章内容首尾无空格
用例
| 输入 | I am a developer. 1 2 |
|---|---|
| 输出 | I a am developer. |
| 说明 | 无 |
| 输入 | hello world -1 1 |
|---|---|
| 输出 | world hello |
| 说明 | 下标小于0时,从第一个单词开始 |
| 输入 | I am a developer 0 5 |
|---|---|
| 输出 | developer a am I |
| 说明 | 下标大于实际单词个数,则按最大下标算 |
| 输入 | I am a developer -2 -1 |
|---|---|
| 输出 | I am a developer |
| 说明 | 翻转区间无效时,不做翻转 |
C++源码
#include <iostream>
#include <vector>
#include <sstream>
#include <algorithm>
using namespace std;
vector<string> split(string& s, char delimeter) {
vector<string> res;
string item;
stringstream ss(s);
while(getline(ss, item, delimeter)) {
res.push_back(item);
}
return res;
}
int main()
{
string str;
getline(cin, str);
vector<string> vec = split(str, ' ');
int start;
cin >>start;
if (start < 0) {
start = 0;
}
if (start > vec.size()) {
start = vec.size() -1;
}
int end;
cin >> end;
if (end < 0) {
end = 0;
}
if (end > vec.size()) {
end = vec.size() -1;
}
if (start >= end) {
cout << str;
return 0;
}
int l = start;
int r = end;
while (l < r) {
string tmp = vec[l];
vec[l] = vec[r];
vec[r] = tmp;
l++;
r--;
}
for (int i = 0; i < vec.size(); i++) {
cout << vec[i];
if (i < vec.size() -1) {
cout << " ";
}
}
return 0;
}