استبدال العناصر في سلسلة استنادا إلى المسند
سؤال
أحتاج إلى استبدال الأحرف في QString
بناء على
QChar::category
.في شروط ستدليب أريد أن
string.erase(std::remove_if(begin(string), end(string),
[](QChar c) {
QChar::Category cat = c.category();
return cat == .... || cat == ...; }),
string.end());
بدلا من ذلك ، أنا سعيد مع التعبير العادي الذي يعمل على حرف يونيكود
الفئات التي يمكنني استخدامها ل QString::replace
.
هل هذا ممكن مع كسترينغ أو هل أنا حقا بحاجة لتحويل السلسلة
في std::vector<QChar>
والعودة?
تحرير:الفئات التي أريد احتفظ:
- لأول تشاراتر:$ ، _ ، أو أي حرف في فئات يونيكود " حرف كبير (لو)" ، " حرف صغير (ليرة لبنانية)" ، " حرف عنوان (لوت)" ، " حرف معدل (لم)" ، "حرف آخر (لو)" ، أو " رقم الحرف (نل)"
- بالنسبة للباقي:الرمز النقطي الأول بالإضافة إلى أي ش + 200ج صفر عرض أحرف غير النجار ، ش+200د صفر عرض أحرف النجار ، والأحرف في فئات يونيكود "علامة عدم التباعد (المنغنيز)" ، "علامة الجمع بين التباعد (ماك)" ، "رقم الرقم العشري (ند) "، أو"ترقيم الموصل (بيسي)".
يمكنني أن أفعل أولا / الراحة في تمريرات متعددة.
المحلول
توفر كيو تي طرقها الخاصة للقيام بمثل هذه الأشياء.سواء كان ذلك جيدا, أم لا أمر مشكوك فيه, ولكن كيو تي الاصطلاحية سيكون
QString result;
result.reserve(string.size());
foreach (const QChar& c, string) {
if (is_good(c)) {
result += c;
}
}
بالطبع ، يمكنك أن تفعل ذلك مع لامبداس و std::for_each
std::for_each(string.begin(), string.end(),
[&result](QChar c)
{
if (is_good(c)) {result += c; }
}
);
لكنها ليست كذلك Qt
اصطلاحي.
لاحظ أن إزالة الرموز من سلسلة أبطأ ، ثم إضافة جديدة ، إذا تم حجز مساحة ، وهذا هو السبب في نموذج التعليمات البرمجية الأولى سريعة.
لا تنتمي إلى StackOverflow