3

假设我有一万字以上的字符串,比如著名小说《老人与海》的内容

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

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

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

最简单直观的算法是:

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

但是效率太低了。

我能想到的一个改进是将字符串分成多个小字符串,然后使用多线程分别处理每个小字符串,然后组合结果。

还有其他想法吗?

顺便说一句,我正在使用 QT

4

1 回答 1

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);
    }
}
于 2012-08-21T09:05:35.013 回答