首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用空格字符替换子字符串

用空格字符替换子字符串
EN

Stack Overflow用户
提问于 2020-08-31 08:09:50
回答 4查看 152关注 0票数 1

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

、WUB、‘s之间有2个。因此,if语句中的第一个条件是不打印两个空格,而是在执行代码时打印两个空格。

代码语言:javascript
复制
Input:  WUBWEWUBAREWUBWUBTHEWUBCHAMPIONSWUBMYWUBFRIENDWUB
Output: WE ARE THE CHAMPIONS MY FRIEND 

到目前为止,我的代码如下:

代码语言:javascript
复制
#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语句从未执行?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-31 08:43:21

实际上这里有三个bug,所以用一个答案来总结它们可能是值得的:

  1. 第一个条件:

if (si == 'W‘&& si+1 == 'U’&& si+2 == 'B')

对最后两个字符来说是越界的。一个解决办法是先检查长度:

如果(i< s.length() -2& si == 'W‘&& si+1 == 'U’& si+2 == 'B')

  1. 有一个multicharacter-literal

如果(pct == '32‘x\x p.empty())使用' '32std::isspace代替。最后一个是最好的。--

相同条件下的

pct == '32‘

总是超出界限:ct等于p.length()。(归功于一些程序员,他在注释中提到了这一点!)变量ct也是多余的,因为std::string知道它的长度。我建议使用std::string::back()访问最后一个字符,并按如下方式重新排序条件:

如果( std::isspace(p.back())) ) (p.empty() \x{e76f})

票数 1
EN

Stack Overflow用户

发布于 2020-08-31 08:12:47

这个条件

代码语言:javascript
复制
if(p[ct]=='32')

应读为

代码语言:javascript
复制
if(p[ct]==32)

代码语言:javascript
复制
if(p[ct]==' ')

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

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

编辑

对于一个完整的解决方案,你需要完全理解你想要解决的问题。问题陈述有点含糊:

从(给定字符串)中移除子字符串("WUB")。如果需要的话就放个地方。

你考虑了最后一个条件,但还不够深入。这是什么意思,‘如果需要’?如果得到的字符串是空的,或者您已经给它添加了一个空格(当您遇到第二个连续的WUB时),则不需要替换。如果您在WUB,也没有必要,但是除了可能有另一个WUB的.

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

票数 3
EN

Stack Overflow用户

发布于 2020-08-31 08:15:36

有两件事会破坏您的代码:

您正在执行像下面这样的for循环,但是在这里阅读(s[i]=='W' && s[i+1]=='U' && s[i+2]=='B')

  • and:if(p[ct]=='32'),您的意思是(pct==32)还是if(p[ct]==' ')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63667096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档