如何在 QLatin1String 中搜索子字符串?
How to search substring in QLatin1String?
为什么QLatin1String class里面没有任何搜索子串的操作,比如indexOf
、find
或contains
?只有 startsWith
和 endsWith
我被找到了,但是他们不能在字符串中间搜索
至于为什么,你得用 Qt 来解决这个问题。
一般来说QLatin1String
是用来表示我们以前所说的ASCII文本(没有Unicode)。 QString
是 Qt 中默认的、全能的字符串,您通常应该使用它,或者您可以将它转换为 std::string
并使用它。这些中的任何一个都可能以副本为代价。
如果你想避免复制,QLatin1String
确实有 begin()
和 end()
函数,所以你也可以在上面使用标准算法,比如 C++17 的新 std::search()
:
auto s = QLatin1String("The lazy dog");
auto needle = QLatin1String("azy");
auto it = std::search( std::begin(s), std::end(s),
std::boyer_moore_horspool_searcher( std::begin(needle), std::end(needle) ) );
这是一个使用 std::string
s 的工作示例,它也适用于 Coliru.
上的 QLatin1String
s
更多信息见Bartek's coding blog。
为什么QLatin1String class里面没有任何搜索子串的操作,比如indexOf
、find
或contains
?只有 startsWith
和 endsWith
我被找到了,但是他们不能在字符串中间搜索
至于为什么,你得用 Qt 来解决这个问题。
一般来说QLatin1String
是用来表示我们以前所说的ASCII文本(没有Unicode)。 QString
是 Qt 中默认的、全能的字符串,您通常应该使用它,或者您可以将它转换为 std::string
并使用它。这些中的任何一个都可能以副本为代价。
如果你想避免复制,QLatin1String
确实有 begin()
和 end()
函数,所以你也可以在上面使用标准算法,比如 C++17 的新 std::search()
:
auto s = QLatin1String("The lazy dog");
auto needle = QLatin1String("azy");
auto it = std::search( std::begin(s), std::end(s),
std::boyer_moore_horspool_searcher( std::begin(needle), std::end(needle) ) );
这是一个使用 std::string
s 的工作示例,它也适用于 Coliru.
QLatin1String
s
更多信息见Bartek's coding blog。