前面と背面の空白を削除するために、Qtはを提供していますQByteArray::trimmed()
。ただし、基になる文字列のコピーを毎回不必要に作成します。
空白をトリミングするための一般的で効率的な方法(できればテンプレートを使用)はありますQByteArray, QString, std:: string
か?
1つの単純な方法:
template<typename T>
T& Trim (T& value)
{
auto pos = value.size();
while(pos != 0 and value[--pos] == ' ');
if(++pos < value.size())
value.erase(pos);
if(value.size() > 0)
{
pos = -1;
while(value[++pos] == ' ');
if(pos > 0)
value.erase(0, pos);
}
return value;
}
上記は、次のようなメソッドを持つすべてのタイプをサポートしますstd::string
。
size()
operator[] const
erase(pos, n)
残念ながら、Qtにはerase()
(名前はremove()
)が欠けています。QtタイプQString
とをサポートするために、QByteArray
次のラッパーを使用できます。
template<class String>
struct QtWrap
{
String& m_Value;
auto size () const { return m_Value.size(); }
auto erase (int pos) { return m_Value.truncate(pos); }
auto erase (int pos, int length) { return m_Value.remove(pos, length); }
auto& operator[] (const int pos) const { return m_Value.data()[pos]; }
};
使用法:
QByteArray s;
QtWrap<QByteArray> qs{s};
Trim(qs); // Tested OK in QtCreator: Modifies the underlying `s`
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加