StringBuilder

概要

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>

TempString<_E>

构造函数

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)
Unless stated otherwise Content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License