【发布时间】:2020-12-19 08:29:57
【问题描述】:
我得到一个字符串,我必须从中删除一个子字符串。即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 语句从未执行?
【问题讨论】:
-
是什么让您认为编译器正在跳过它?调试代码时看到了什么?
-
s[i+1]和s[i+2]将在i == s.size() - 1和i == s.size() - 2(循环的最后一次和倒数第二次迭代)时越界。 -
而
'32'是一个多字符常量,它们的工作方式是特定于实现的。你的意思是p[ct] == 32(整数常量32),还是p[ct] == ' '检查单个空格(或者std::isspace(p[ct])检查任何空格)? -
顺便说一句,由于
p开始是空的,那么p[ct]也有可能超出范围。实际上,由于您以递增的ct锁步追加字符,因此ct将始终等于p.size(),因此ct将始终超出范围。
标签: c++ string if-statement stdstring