原题链接:https://codeforces.com/problemset/problem/208/A
学习链接:https://blog.csdn.net/cs_zlg/article/details/7782625
#include <bits/stdc++.h>
using namespace std;
//接收一行字符串,然后把中间的WUB删除(换成空格)
int main(){
char s[205];
int len; //数组的实际存了值的长度
int flag; //保存最后一个有效单词的最后一个字母的位置
while(scanf("%s", s) != EOF){
//EOF是啥忘了,好像是表示在代码还未输入结束的时候
len = strlen(s);
// cout << "len = " << len << endl;
for(int i = 0; i < len; i++){
//虽然循环只到有数字的位置,但是数组开的大,所以不会越界
if(s[i] == 'W' && s[i + 1] == 'U' && s[i + 2]=='B'){
//WUB的位置全部置数字字符
s[i] = s[i + 1] = s[i + 2] = '0';
//跳转到WUB后面的位置,本应该 + 3,但是for循环还有一个 ++
i += 2;
}else {
//获得falg的值
flag = i;
}
}
//输出环节
for(int i = 0; i < len; i++){
if(s[i] != '0'){
if(i != flag){
//如果还没有循环到最后的地方
printf("%c", s[i]);
}else {
printf("%c\n", s[i]);
//因为是最后的地方了,所以要跳出循环了(换行)
break;
}
}else if(i > 0 && s[i - 1] != '0'){
//有个默认前提,因为是上面这个if的分支,
//默认前提:s[i] == '0'
printf(" ");
//这个的好处就是不会输出最前面的那个空格
i += 2;
}
}
}
return 0;
}