也许我忽略了一些显而易见的事情,但我想知道在C++中实现全字符串替换的最快方法是什么.起初我考虑简单地将空格连接到搜索词,但这不考虑字符串边界或标点符号.
这是我目前对(非全字)替换的抽象:
void Replace(wstring& input, wstring find, wstring replace_with) {
if (find.empty() || find == replace_with || input.length() < find.length()) {
return;
}
for (size_t pos = input.find(find);
pos != wstring::npos;
pos = input.find(find, pos)) {
input.replace(pos, find.length(), replace_with);
pos += replace_with.length();
}
}
Run Code Online (Sandbox Code Playgroud)
如果我只考虑空格作为单词边界,我可以通过比较搜索字符串的开头和结尾与查找字符串来覆盖字符串边界,然后使用替换(L''+ find + L')来实现这一点. ') ....但我想知道是否有一个更优雅的解决方案,有效地包括标点符号.
让我们考虑一个词是被用空白或者标点符号隔开任何字符集(保持它的简单让我们说"#$%&'()*+, - ./最低-这恰好对应(c > 31 && c < 48)) .
在我的应用程序中,我必须在一个相当大的短字符串数组上调用此函数,其中可能包含各种Unicode,我不想拆分新单词.我还想避免包含任何外部库,但STL很好.
不使用正则表达式的目的是减少开销的承诺,以及适合于在大型数据集上执行此特定任务的快速函数的目标.
我有一个网页,我正在等待按钮出现,当它出现时,我想点击它.该按钮位于计时器上,可能需要一个小时才能显示.此外,如果按钮花费的时间超过一定时间,我想移动鼠标(否则网站会自动将我注销).
所以,等待按钮出现我设计了这个Sikuli脚本:
button = "button.png"
while(1):
if exists(button):
print("found it")
click(button)
break
else:
print("wait longer")
wait(button,30*60)
# do a regular task
print "all done!"
Run Code Online (Sandbox Code Playgroud)
以上似乎没有功能.如果按钮在屏幕上,脚本将找到它...但是,如果它必须等待它将只是快速超时FindFailed异常(click()即使屏幕上不存在该按钮).我考虑过写一个处理程序,但看起来有点矫枉过正.
我做错了什么,等待这么长时间的视觉事件的最佳方法是什么?