#include <QApplication>
#include <QRegExp>
#include <QTime>
#include <iostream>
#include <QSet>
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
;
{
//return true if text not contains any of char in chars
QString::const_iterator it
= text.
constBegin();
QString::const_iterator end
= text.
constEnd();
while(it != end)
{
if(chars.contains(*it) == false)
return true;
++it;
}
return false;
}
bool find_first_not_of
(const QSet<QChar>
& chars,
const QString & text
) {
//return true if text not contains any of char in chars
QString::const_iterator it
= text.
constBegin();
QString::const_iterator end
= text.
constEnd();
while(it != end)
{
if(chars.contains(*it) == false)
return true;
++it;
}
return false;
}
bool reg_find_first_not_of
(const QString & /*chars*/,
const QString & text
) {
return !regexp.exactMatch(text);
}
int main(int argc, char *argv[])
{
",abcdefghijklmnopqrstuwvxyzABCDEFGH IJKLMNOPRSTUWQVXY.Z";
QSet<QChar> chars_set;
for(int i = 0; i < chars.size(); ++i)
chars_set.insert(chars.at(i));
//regexp.setPattern("[" + QRegExp::escape(chars) + "]+");
regexp.setPattern("[A-Za-z\\,\\.\\ ]+");
bool f1;
bool f2;
f1 = find_first_not_of(chars_set, txt);
t.start();
for(int i = 0; i < 5000; ++i)
f1 = find_first_not_of(chars_set, txt);
const int e1 = t.elapsed();
f2 = reg_find_first_not_of(chars, txt);
t.start();
for(int i = 0; i < 5000; ++i)
f2 = reg_find_first_not_of(chars, txt);
const int e2 = t.elapsed();
std::cout << "elapsed for f1 : " << e1 << "ms" << std::endl;
std::cout << "elapsed for f2 QRegExp: " << e2 << "ms" << std::endl;
std::cout << "f1 returns: " << f1 << std::endl;
std::cout << "f2 returns: " << f2 << std::endl;
return 0;
}
#include <QApplication>
#include <QRegExp>
#include <QTime>
#include <iostream>
#include <QSet>
const QString txt =
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
"ac, hendrerit nec justo. Nullam tristique consequat sem, id placerat eros egestas vitae. Donec imperdiet, metus id feugiat rhoncus, sem risus condimentum diam, eget volutpat diam dolor in dui. Proin mi quam,"
;
bool find_first_not_of(const QString & chars, const QString & text)
{
//return true if text not contains any of char in chars
QString::const_iterator it = text.constBegin();
QString::const_iterator end = text.constEnd();
while(it != end)
{
if(chars.contains(*it) == false)
return true;
++it;
}
return false;
}
bool find_first_not_of(const QSet<QChar> & chars, const QString & text)
{
//return true if text not contains any of char in chars
QString::const_iterator it = text.constBegin();
QString::const_iterator end = text.constEnd();
while(it != end)
{
if(chars.contains(*it) == false)
return true;
++it;
}
return false;
}
QRegExp regexp;
bool reg_find_first_not_of(const QString & /*chars*/, const QString & text)
{
return !regexp.exactMatch(text);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTime t;
const QString chars =
",abcdefghijklmnopqrstuwvxyzABCDEFGH IJKLMNOPRSTUWQVXY.Z";
QSet<QChar> chars_set;
for(int i = 0; i < chars.size(); ++i)
chars_set.insert(chars.at(i));
//regexp.setPattern("[" + QRegExp::escape(chars) + "]+");
regexp.setPattern("[A-Za-z\\,\\.\\ ]+");
bool f1;
bool f2;
f1 = find_first_not_of(chars_set, txt);
t.start();
for(int i = 0; i < 5000; ++i)
f1 = find_first_not_of(chars_set, txt);
const int e1 = t.elapsed();
f2 = reg_find_first_not_of(chars, txt);
t.start();
for(int i = 0; i < 5000; ++i)
f2 = reg_find_first_not_of(chars, txt);
const int e2 = t.elapsed();
std::cout << "elapsed for f1 : " << e1 << "ms" << std::endl;
std::cout << "elapsed for f2 QRegExp: " << e2 << "ms" << std::endl;
std::cout << "f1 returns: " << f1 << std::endl;
std::cout << "f2 returns: " << f2 << std::endl;
return 0;
}
To copy to clipboard, switch view to plain text mode
and results are better:
Bookmarks