我该如何解决编码问题,这是使用字符串的新手

时间:2018-08-15 07:32:51

标签: c++

我的任务是获取一条“ tweet”,并通过代码getline(com,tweet)运行它,并找到缩写词(例如BFF,FTW),并喷出相同的“ tweet”,但遇到的每个首个缩写定义。例如。用户在其中输入了两次带有LOL的句子,完成代码后,第一个LOL应该大声笑出来。输入的字符数上限为160个。我的代码在混乱的定义和反义的文本上做着有趣的事情。大笑的大声笑变成了:大声笑着,像这样。

{{1}}

}

2 个答案:

答案 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);