首页 > 解决方案 > 用空格字符替换子字符串

问题描述

我得到一个字符串,我必须从中删除一个子字符串。即WUB,并将其替换为空格字符。

ÁRE 和 'THE' 之间有 2 个WUB 。所以 if 语句中的第一个条件是不打印两个空格,而是在执行代码时打印两个空格。

Input:  WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB
Output: WE ARE THE CHAMPIONS MY FRIEND 

到目前为止,这是我的代码:

#include <iostream>

using namespace std;

int main()
{
    const string check = "WUB";
    string s, p;
    int ct = 0;
    cin >> s;

    for (int i = 0; i < s.size(); i++)
    {
        if (s[i] == 'W' && s[i+1] == 'U' && s[i+2] == 'B')
        {
            i += 2;
            if (p[ct] == '32' || p.empty())
            {
                continue;
            }
            else
            {
                p += ' ';
                ct++;
            }
        }
        else
        {
            p += s[i];
            ct++;
        }
    }

    cout << p;
    return 0;
}

为什么第一个 if 语句从未执行?

标签: c++stringif-statementstdstring

解决方案


这个条件

if(p[ct]=='32')

应该读

if(p[ct]==32)

或者

if(p[ct]==' ')

也就是说,与空格字符的数值或空格字符本身进行比较。

此外,当您i增长到接近字符串的长度时,子表达式s[i+1]可能s[i+2]会到达字符串的非退出字符。您应该继续循环使用i<s.length()-2条件。

编辑

要获得完整的解决方案,您需要完全了解要解决的问题。问题陈述有点模糊:

从(给定的字符串)中删除子字符串 ( "WUB")。如果需要,可以用空格代替它。

您考虑了最后一个条件,但还不够深入。“如果需要”是什么意思?如果结果字符串为空或者您已经在其上附加了一个空格(当您遇到第二个连续的 时),则不需要替换WUB。如果你在WUB,也没有必要,但没有什么比它更重要的了——除了可能是另一个WUB...

因此,当您找到一个"WUB"子字符串时,现在决定是否需要空格还为时过早。当您发现一些(或s)之后WUB的非文本并且在那些(s)之前有一些文本时,您知道您需要一个空格。WUBWUBWUB


推荐阅读