在c-strings中,我们需要分配合理大小的内存。为了避免在字符串操作中重新分配,我们可以使用C#或Java中的Stringbuilder或 - 在C中 - 只为字符串分配更多内存。但如果我们事先不知道内存要求,那么它仍然是一个问题。我们有一些像链表一样的实现吗?我的意思是分配内存块列表和方法c_str()
,它从节点
liststring a(4); // requested block size
a.append("hello ");
a.append("world");
// should create three nodes, 4 bytes allocated for each
// "hell" -> "o wo" -> "rld"
a.c_str(); // "hello world";
或者,如果我们想避免重新分配,我们会使用其他方法吗?请解释一下是不是坏主意。
答案 0 :(得分:3)
有关将字符串保存为树的数据结构,请参阅Ropes上的文章。它与你的想法类似。
答案 1 :(得分:0)
没有标准的方法可以做到这一点。但是你可以实现自己的字符链表和转换为C字符串。
答案 2 :(得分:0)
我假设您的意思是 C ++ ,而不是 C 。
C ++ 中字符串操作的标准类是 std :: string 。
Java 或 .NET 中的字符串类是不可变的。另一方面, std :: string 是可变的,因此它的行为与 StringBuilder 完全相同。