什么是同时替换非常长的字符串中的多个单词的最快方法

时间:2012-08-21 03:57:10

标签: qt str-replace

假设我有一个包含超过10,000个单词的字符串,例如,它是着名小说“老人与海”的内容

和一个有1000个单词对的字典,例如,

before,after
--------------
fish , net
black, white
good, bad
....
....
round,rect

所以我想要做的是,根据字典,用'net'替换字符串中的所有'fish',用'white'替换'black'....

最简单直观的算法是:

foreach(line, dict)
   str.replace(line.before,line.after)

但效率低下。

我能想到的一个改进是 然后将字符串分隔为多个小字符串 使用multithread分别处理每个smallstring,然后结合结果。

还有其他想法吗?

不过,我正在使用QT

1 个答案:

答案 0 :(得分:2)

我认为拥有一个10k字的向量,而不是一串字符是个更好的主意。

就像这样:

QVector<QString> myLongString;

您的字典可以实现为哈希表:

QHash<QString, QString> dict;

这将为您的词典单词提供持续的访问时间:

QString replaceWith = dict.value("fish") // replaceWith == "net"

然后你可以遍历你的向量并替换单词:

for (int i=0; i < myLongString.size(); ++i)
{
    QString word = myLongString[i];
    if dict.contains(word)
    {
        myLongString[i] = dict.value(word);
    }
}