C-строка как связанный список?

В c-строках нам нужно выделить разумный объем памяти. Чтобы избежать перераспределения в строковых операциях, мы можем использовать что-то вроде Stringbuilder в C# или Java или - в C - просто выделить больше памяти для строки. Но все же это может быть проблемой, если мы не знаем требования к памяти заранее. У нас есть какая-то реализация, такая как связанный список? Я имею в виду выделить список блоков памяти и метод c_str() который создает C-строку из своих узлов

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";

Или мы используем другой подход, если хотим избежать перераспределения? Пожалуйста, объясните, если это плохая идея.

3 ответа

Решение

См. Статью о Веревках для структуры данных, которая хранит строки как деревья. Это похоже на вашу идею.

Я предполагаю, что вы имели в виду C++, а не C.

Стандартным классом для работы со строками в C++ является std::string.

Строковые классы в Java или .NET являются неизменяемыми. С другой стороны, std::string изменчив, поэтому он ведет себя точно так же, как StringBuilder.

Нет стандартных способов сделать это. Но вы можете реализовать свой собственный связанный список символов и преобразование в строку C.

Другие вопросы по тегам