假设我有一个包含超过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答案 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);
}
}