StringBuilder
|
Table of Contents
|
概要
StringBuilder类似Java中的同名类,是一个可修改的、线性内存的字符串。
规格
template <class _E> class BasicStringBuilder : public std::vector<_E> { public: explicit BasicStringBuilder(const TempString<_E> s); BasicStringBuilder(); BasicStringBuilder(size_type cch, _E ch); BasicStringBuilder(const _E* s, size_type count); template <class _InputIterator> BasicStringBuilder(_InputIterator first, _InputIterator last); public: // 转换为一个临时的String或子String(这并不产生副本,是很轻的操作)。 BasicString<_E> cast_str() const; BasicString<_E> cast_substr( size_type from = 0, size_type cch = (size_type)-1) const; public: // 生成String或子String(这将进行字符串内容的复制)。 template <class AllocT> BasicString<_E> str(AllocT& alloc) const; template <class AllocT> BasicString<_E> substr( AllocT& alloc, size_type from = 0, size_type cch = (size_type)-1) const; public: template <class _InputerIterator> BasicStringBuilder& assign(_InputerIterator first, _InputerIterator last); BasicStringBuilder& assign(const TempString<_E> s); BasicStringBuilder& assign(const _E* s, size_type cch); BasicStringBuilder& assign(size_type cch, _E ch); BasicStringBuilder& operator=(const TempString<_E> s); public: template <class _InputerIterator> BasicStringBuilder& append(_InputerIterator first, _InputerIterator last); BasicStringBuilder& append(const TempString<_E> s); BasicStringBuilder& append(const _E* s, size_type cch); BasicStringBuilder& append(size_type cch, _E ch); BasicStringBuilder& operator+=(const TempString<_E> s); public: BasicStringBuilder& insert(iterator it, const TempString<_E> s); BasicStringBuilder& insert(iterator it, const _E* s, size_type cch); public: template <class _RandIterator> BasicStringBuilder& replace( iterator first, iterator last, _RandIterator bfirst, _RandIterator blast); template <class _RandIterator> BasicStringBuilder& replace( iterator first, iterator last, size_type count, _E ch); BasicStringBuilder& replace( iterator first, iterator last, const _E* s, size_type cch); BasicStringBuilder& replace(iterator first, iterator last, const TempString<_E> s); public: void erase(); const _E* data() const; size_type length() const; basic_string<_E> stl_str() const; public: // 在字符串中查找子串(正向查找)。 iterator find(const TempString<_E> pattern, iterator from = begin()) const; iterator find(const _E* pattern, size_type len, iterator from = begin()) const; public: // 在字符串中查找子串(反向查找)。 iterator rfind(const TempString<_E> pattern, iterator from = begin()) const; iterator rfind(const _E* pattern, size_type len, iterator from = begin()) const; public: // 查找某个集合中的字符在字符串中第一次出现的位置(正向查找)。 iterator find_first_of(const TempString<_E> pattern, iterator from = begin()) const; iterator find_first_of(const _E* pattern, size_type len, iterator from = begin()) const; public: // 查找某个集合中的字符在字符串中第一次出现的位置(反向查找)。 reverse_iterator find_last_of(const TempString<_E> pattern, reverse_iterator from = rbegin()) const; reverse_iterator find_last_of(const _E* pattern, size_type len, reverse_iterator from = rbegin()) const; public: // 在字符串中查找不在集合中出现的第一个字符的位置(正向查找)。 iterator find_first_not_of(const TempString<_E> pattern, iterator from = begin()) const; iterator find_first_not_of(const _E* pattern, size_type len, iterator from = begin()) const; public: // 在字符串中查找不在集合中出现的第一个字符的位置(反向查找)。 reverse_iterator find_last_not_of(const TempString<_E> pattern, reverse_iterator from = rbegin()) const; reverse_iterator find_last_not_of(const _E* pattern, size_type len, reverse_iterator from = rbegin()) const; public: // 比较两个字符串。 int compare(const TempString<_E> b) const; int compare(const _E* b, size_type blen) const; int compare(size_type from, size_type count, const TempString<_E> b) const; int compare(size_type from, size_type count, const _E* b, size_type blen) const; public: // 比较两个字符串(传入单字符的比较函数)。 template <class _Compr> int compare_by(const TempString<_E> b, _Compr cmp) const; template <class _Compr> int compare_by(const _E* b, size_type blen, _Compr cmp) const; public: // 比较两个字符串(忽略大小写)。 int icompare(const TempString<_E> b) const; int icompare(const _E* b, size_type blen) const; public: // 判断是否包含指定的串。 bool contains(const TempString<_E> b) const; bool contains(const _E* b, size_type blen) const; }; typedef BasicStringBuilder<char> StringBuilder; typedef BasicStringBuilder<WCHAR> WStringBuilder;
_E
- 字符类型。如char、WCHAR等。
std::vector<_E>
- 是的,StringBuilder被实现为std::vector的派生类。为什么如此?你可以理解为为了代码重用。但是这里有一些更深层次的理由。
TempString<_E>
- 我们大量地使用了TempString。关于这样做的原因,我们在“C/C++字符串处理(2):String - 常字符串”中进行了描述。
构造函数
explicit BasicStringBuilder(const TempString<_E> s); BasicStringBuilder(); BasicStringBuilder(size_type cch, _E ch); BasicStringBuilder(const _E* s, size_type count); template <class _InputIterator> BasicStringBuilder(_InputIterator first, _InputIterator last);
cast_str/cast_substr - 转换为一个临时常String
// 转换为一个临时的String或子String(这并不产生副本,是很轻的操作)。 BasicString<_E> cast_str() const; BasicString<_E> cast_substr( size_type from = 0, size_type cch = (size_type)-1) const;
注意
- 由于生产的BasicString并不真正产生字符串拷贝,故此应当保证在该BasicString析构前,确保相应的BasicStringBuilder实例没有被销毁或者进行了修改。
str/substr - 生成常String或子String
// 生成String或子String(这将进行字符串内容的复制)。 template <class AllocT> BasicString<_E> str(AllocT& alloc) const; template <class AllocT> BasicString<_E> substr( AllocT& alloc, size_type from = 0, size_type cch = (size_type)-1) const;
assign/operator= - 赋值
template <class _InputerIterator> BasicStringBuilder& assign(_InputerIterator first, _InputerIterator last); BasicStringBuilder& assign(const TempString<_E> s); BasicStringBuilder& assign(const _E* s, size_type cch); BasicStringBuilder& assign(size_type cch, _E ch); BasicStringBuilder& operator=(const TempString<_E> s);
append/operator+= - 字符串连接
template <class _InputerIterator> BasicStringBuilder& append(_InputerIterator first, _InputerIterator last); BasicStringBuilder& append(const TempString<_E> s); BasicStringBuilder& append(const _E* s, size_type cch); BasicStringBuilder& append(size_type cch, _E ch); BasicStringBuilder& operator+=(const TempString<_E> s);
insert - 插入字符串
BasicStringBuilder& insert(iterator it, const TempString<_E> s); BasicStringBuilder& insert(iterator it, const _E* s, size_type cch);
replace - 字符串替换
template <class _RandIterator> BasicStringBuilder& replace( iterator first, iterator last, _RandIterator bfirst, _RandIterator blast); template <class _RandIterator> BasicStringBuilder& replace( iterator first, iterator last, size_type count, _E ch); BasicStringBuilder& replace( iterator first, iterator last, const _E* s, size_type cch); BasicStringBuilder& replace(iterator first, iterator last, const TempString<_E> s);
erase - 清空字符串
void erase();
- 当然你也可以清空一段范围的字符串。这在基类std::vector中提供。
data - 取字符串的数据指针
const _E* data() const;
- 记住一点:BasicStringBuilder并不是以'\0'作为字符串结尾的。所以这里的data()函数必须配合下面取字符串长度的函数(length或者size)才有意义。
length - 取字符串的长度
size_type length() const;
- 同size()函数。
stl_str - 转为STL string
basic_string<_E> stl_str() const; // 将String转为STL string。这个操作比较费时。
find - 在字符串中查找子串(正向查找)
iterator find(const TempString<_E> pattern, iterator from = begin()) const; iterator find(const _E* pattern, size_type len, iterator from = begin()) const;
rfind - 在字符串中查找子串(反向查找)
iterator rfind(const TempString<_E> pattern, iterator from = begin()) const; iterator rfind(const _E* pattern, size_type len, iterator from = begin()) const;
find_first_of - 在字符串中查找集合中的字符之一(正向)
iterator find_first_of( const TempString<_E> pattern, iterator from = begin()) const; iterator find_first_of( const _E* pattern, size_type len, iterator from = begin()) const;
- 查找某个集合中的字符在字符串中第一次出现的位置(正向查找)。
find_last_of - 在字符串中查找集合中的字符之一(反向)
reverse_iterator find_last_of( const TempString<_E> pattern, reverse_iterator from = rbegin()) const; reverse_iterator find_last_of( const _E* pattern, size_type len, reverse_iterator from = rbegin()) const;
- 查找某个集合中的字符在字符串中第一次出现的位置(反向查找)。
find_first_not_of - 在字符串中查找非集合中的任意字符(正向)
iterator find_first_not_of( const TempString<_E> pattern, iterator from = begin()) const; iterator find_first_not_of( const _E* pattern, size_type len, iterator from = begin()) const;
- 在字符串中查找不在集合中出现的第一个字符的位置(正向查找)。
find_last_not_of - 在字符串中查找非集合中的任意字符(正向)
reverse_iterator find_last_not_of( const TempString<_E> pattern, reverse_iterator from = rbegin()) const; reverse_iterator find_last_not_of( const _E* pattern, size_type len, reverse_iterator from = rbegin()) const;
- 在字符串中查找不在集合中出现的第一个字符的位置(反向查找)。
compare - 比较两个字符串
int compare(const TempString<_E> b) const; int compare(const _E* b, size_type blen) const; int compare(size_type from, size_type count, const TempString<_E> b) const; int compare(size_type from, size_type count, const _E* b, size_type blen) const;
- 相关的全局函数如下:
template <class _E> bool operator<cmp>(const BasicString<_E>& a, const BasicString<_E>& b); // 比较两个字符串。这里<cmp>是各种比较的算符,如==、!=、<、<=、>、>=等等。
compare_by - 比较两个字符串(传入单字符的比较函数)
template <class _Compr> int compare_by(const TempString<_E> b, _Compr cmp) const; template <class _Compr> int compare_by(const _E* b, size_type blen, _Compr cmp) const;
_Compr cmp
- 单字符比较函数(或仿函数)。仿函数规格要求:
template <class _E> struct _Compr { int operator()(_E a, _E b); };
icompare - 比较两个字符串(忽略大小写)
int icompare(const TempString<_E> b) const; int icompare(const _E* b, size_type blen) const;
contains - 判断是否包含指定的串
bool contains(const TempString<_E> b) const; bool contains(const _E* b, size_type blen) const;
相关参考
page_revision: 5, last_edited: 1206420171|%e %b %Y, %H:%M %Z (%O ago)





