有一个字符串包含单词“WUB”,我需要从字符串中删除这个单词。
所以我在if块中使用了substring方法,这样在遍历循环时,if块可以捕获WUB并打印1
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s="WUBhello";
for(int i=0;i<s.length();i++){
if(s.substr(i,i+2)=="WUB"){
cout<<"1 ";
i+=2;
}
else{
cout<<s[i];
}
}
return 0;
}
我以为它只会打印“hello”,但它打印的是“WUBhello”
3条答案
按热度按时间slmsl1lt1#
您也可以使用
std::stringstream
。注意:在使用任何标准库函数之前,请务必检查其函数签名。
std::substr
的第二个参数是子字符串的长度。sczxawaw2#
有几个问题,一些错误和一些不良做法(见下面的边注)。
首先,
std::string::substr
的第二个参数是count
--即字符数,因此在您的情况下,它应该是3
,而且在使用substr
之前,您也不需要检查i < s.length()-3
。那么你的循环的整个逻辑都是有缺陷的。使用调试器将帮助你获得更多的洞察力。参见:What is a debugger and how can it help me diagnose problems?.
如果要从字符串中删除子字符串,可以执行以下操作:
1.使用
std::string::find
查找子字符串。1.然后使用
std::string::erase
将其删除。如果要删除多次出现的子字符串,可以在循环中应用类似的逻辑:
w1jd8yoj3#
std::string::substr
的第二个参数是独占的,所以应该是i+3
,还有,即使逻辑正确,它也会打印“1 hello”。