我知道我已经在不遥远的过去问过一个类似的问题而且我很抱歉要问一个类似的问题,但我可以知道如何用我的代码做这件事。我希望将第一个和最后一个字符保留在字符串中,并替换中心的所有字符。
// finds all banned words
size_t pos = textWords[i].find(bannedWords[j]);
// checks through the vector to find all words in the banned list
if (string::npos != pos)
{
// replaces the middle character with a *
textWords[i].replace(pos + 1 , 1 , 1 , '*');
}
这是我正在使用它的代码,但它只适用于三个字母的单词,我希望它能用于任何长度的单词。
我再次对我问过一个类似的问题感到抱歉,但我坚持这个问题。
答案 0 :(得分:3)
使用std::string::replace
的示例(使用链接页面上的第5个变体):
std::string s = "a-test-string";
s.replace(1, s.length() - 2, s.length() -2, '*');
答案 1 :(得分:1)
如果您阅读std::string::replace
上的文档,则会看到您正在使用的电话
textWords[i].replace(pos + 1 , 1 , 1 , '*');
表示“如果你想要更改除了你应该使用的第一个和最后一个字母之外的所有字符”,那么“替换1个字符从位置pos + 1开始,用一个'*'字符”
textWords[i].replace(pos + 1 , bannedWords[j].size()-2 , bannedWords[j].size()-2 , '*');
也就是说,更改bannedWords[j].size()-2
个字符textWords[i]
中的bannedWords[j].size()-2
个字符。
答案 2 :(得分:1)
使用std::string::replace
的重载,它会占用一个字符并将其复制指定的次数。
#include <string>
#include <iostream>
int main()
{
std::string s( "expletive" );
s.replace( 1, s.size() - 2, s.size() - 2, '*' );
std::cout << s << std::endl;
return 0;
}
输出:
e*******e