题解:B4267 [朝阳区小学组 2019] word
主要思路
首先特判字符串为空的情况,按照题目输出
对于正常字符串,可以用到 find 和 substr 这两个 string 自带的函数。依次找到空格的位置,并截取上一个空格的下一个字符到这个空格的前一个字符,用 vector 存储下来。
当空格都找到后时,由于排除了空字符串的情况,所以最后一个空格后一定还有一个字符串,例如 a b,a 后的空格是最后一个空格,但最后还有单词 b。最后输出 vector 长度并排序输出。
AC Code
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef long double db;
const int INT_INF = 0x3f3f3f3f;
const ll LL_INF = 0x3f3f3f3f3f3f3f3f;
// ----------------------------
// ----------------------------
vector<string> vec;
// ----------------------------
int main() {
string s;
int idx, last_idx;
while (getline(cin, s)) {
if (s == "") {
cout << 0 << endl;
continue;
}
vec.clear(); // 注意初始化
last_idx = 0;
idx = s.find(" ", last_idx);
while (idx != s.npos) {
vec.push_back(s.substr(last_idx, idx - last_idx)); // 第二个参数表示截取长度
last_idx = idx + 1; // 取空格的下一个字符
idx = s.find(" ", last_idx);
}
vec.push_back(s.substr(last_idx));
cout << vec.size() << ' ';
sort(vec.begin(), vec.end());
for (string i : vec) cout << i << ' ';
cout << endl;
}
return 0;
}