借助C#源码中stringbuilder的的实现,在C++中实现一个stringbuilder类。非常简单,关键在实现字符串的连接上,直接上代码:
实现
StringBuilder关键的实现在于解决多次字符串操作后的内存碎片问题,下面的代码只是一个玩具,内存增长方式可以自定义,这里我使用的是二倍增长,你也可以4倍增长。
class StringBuilder
{
public:
StringBuilder() {
str = new char[16];
count = 16;
}
StringBuilder(int capacity) {
str = new char[capacity];
count = capacity;
}
StringBuilder append(char* s) {
if (strlen(s) + strlen(str) > count)
{
int len;
if (strlen(s) + strlen(str) >= count*2)
len = strlen(s) + strlen(s) +1;
else
len = count*2;
char* tmp = new char[len];
this->count = len;
strcpy(tmp,this->str);
strcat(tmp,s);
tmp[strlen(str)] = '\0';
delete[] str;
str = tmp;
tmp = NULL;
}
else{
strcat(str,s);
str[strlen(str)] = '\0';
}
return* this;
}
private:
char* str;
size_t count;
};