c++ - 用空格字符替换子字符串
问题描述
我得到一个字符串,我必须从中删除一个子字符串。即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 语句从未执行?
解决方案
这个条件
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)之前有一些文本时,您知道您需要一个空格。WUB
WUB
WUB
推荐阅读
- python - 从同一文件夹中的另一个文件导入功能
- c# - 具有继承和接口的 C# 泛型 where 子句
- python - 我尝试了一切设置 Web Scraping Libraries(安装请求、lxml 和 bs4)但无法完成
- android - 改造 MultipartBody.Part 不发送数据
- javascript - 根据随机数生成器的结果动态选择变量
- firebase - 如何制定安全的 Cloud Firestore 安全规则
- asynchronous - 使用异步 Rust 时如何修复“ld:无法写入输出文件”错误?
- php - 使用 Join CodeIgniter 制作动态模型
- google-sheets - 查询函数在 Col19 之后不拉数据
- python - 无法在我的自定义数据集中训练更快的 rcnn 模型