CodeForce 208 A-Dubstep

原题链接: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;
}
上一篇:[LeetCode] 208. Implement Trie (Prefix Tree)_Medium tag: Trie


下一篇:208道Java中高级高频面试题(含答案)