我的任务是获取一条“ tweet”,并通过代码getline(com,tweet)运行它,并找到缩写词(例如BFF,FTW),并喷出相同的“ tweet”,但遇到的每个首个缩写定义。例如。用户在其中输入了两次带有LOL的句子,完成代码后,第一个LOL应该大声笑出来。输入的字符数上限为160个。我的代码在混乱的定义和反义的文本上做着有趣的事情。大笑的大声笑变成了:大声笑着,像这样。
{{1}}
}
答案 0 :(得分:1)
您首先搜索缩写出现的位置,然后将其替换。替换第一个缩写后,您先前找到的位置将是错误的。
说字符串是:const handler = {
handlerProp: 'handlerProp',
handle() {
console.log(this.handlerProp);
}
};
function invoker(callback) {
callback();
}
// Fixed:
invoker(handler.handle.bind(handler));
// or:
invoker(() => handler.handle());
。因此,lol的位置是0,bff的位置是4。现在您替换lol,因此字符串是“大声笑BFF”,因此bff的位置(4)是错误的,您需要再次搜索以获取正确的位置。 / p>
要解决此问题,请将查找结果移动到if和replace之前。
还要检查搜索是否成功,您应该像LOL BFF
进行比较。
答案 1 :(得分:1)
您的职位不在,因为您在进行任何替换之前就获得了职位。
每个字符串最多也要进行一次替换。
但是,您正在走“复制粘贴”的道路,这不是一个好的路径。
相反,首先要编写一个函数,用一个字符串替换所有出现的字符串。
std::string replace_all(std::string text, const std::string& src, const std::string& subst)
{
int pos = text.find(src);
while (pos != std::string::npos)
{
text.replace(pos, src.size(), subst);
pos = text.find(src, pos + subst.size() + 1);
}
return text;
}
然后使用一个表和一个循环:
std::map<string, string> table = {{"LOL", "loads of loaves"}, {"BFF", "better fast food"}};
for (const auto& it: table)
tweet = replace_all(tweet, it.first, it.second);