Динамично сохраните строки строк с помощью C

Редактор Java

  1. Нажимает Window В» , Предпочтения
  2. Разворачивают Java В» Стиль кода
  3. Щелчок Щелчок Средства форматирования
  4. Щелчок кнопки
  5. Edit вкладка
  6. Indentation Под [1 159] Общие Настройки , устанавливают политика Вкладки к: Spaces only
  7. Нажимают OK бесконечно для применения изменений.

[ Примечание : При необходимости сохраните профиль с новым именем, поскольку профиль по умолчанию не может быть перезаписан.]

Текстовый редактор По умолчанию

Перед версией 3.6:

Window->Preferences->Editors->Text Editors->Insert spaces for tabs

Версия 3.6 и позже:

  1. Нажимают Window В» , Предпочтения
  2. Расширяются Общий В» , Редакторы
  3. Нажимают Text Editors
  4. Check Insert, пробелы для вкладок
  5. Нажимают OK бесконечно для применения изменений.

Примечание, что текстовый редактор по умолчанию используется в качестве основания для многих редакторов не-Java в Eclipse. Удивительно, что эта установка не была доступна до 3.3.

C / C++

  1. Нажимает Window В» , Предпочтения
  2. Расширяются C/C++ В» Стиль кода
  3. Щелчок Щелчок Средства форматирования
  4. кнопка New для создания нового профиля, тогда OK, чтобы продолжиться
  5. Щелчок вкладка
  6. Indentation Под [1 178] Общие Настройки , установить политика Вкладки к: Spaces only
  7. Нажимают OK бесконечно для применения изменений.

HTML

  1. Нажимает Window В» , Предпочтения
  2. Расширяются сеть В» , Файлы HTML
  3. Нажимают Editor
  4. Under Formatting, выбирают Отступ с помощью пробелов , переключатель
  5. Нажимает OK для применения изменений.

CSS

Следует тем же инструкциям для HTML, но выбирает CSS Файлы вместо [1 190] Файлы .

HTML

JSP

По умолчанию, файлы JSP следуют за предпочтениями форматирования Файлов HTML.

интервал XML-файлов XML

настроен в Предпочтениях.

  1. Нажимают Window В» , Предпочтения
  2. Расширяются XML В» , XML-файлы
  3. Нажимают Editor
  4. Select Indent с помощью пробелов
  5. , можно определить размер Добавления отступа в случае необходимости: количество пробелов для расположения с отступом.
5
задан Biswajyoti Das 25 July 2009 в 17:13
поделиться

6 ответов

Есть несколько структур данных, которые позволяют добавлять элементы динамически, без необходимости заранее знать максимальное количество требуемых элементов. Существуют связанные списки, бинарные деревья поиска, сбалансированные деревья, попытки, кучи и многое другое.

Точно так же существует множество способов динамического распределения строк разной длины.

Самый простой способ, вероятно, - использовать простой связанный список :

typedef struct _node {
    struct _node *next;
    char *value;
} node_t;

Вы отслеживаете заголовок , первый элемент в списке, и каждое поле следующее указывает на следующий узел в списке . Например, чтобы просмотреть список, вы должны написать что-то вроде этого:

currentNode = head;
while(currentNode != NULL) {
    /* do something with currentNode->value */
    currentNode = currentNode->next;
}

Не зная, что именно вы хотите сделать, я не могу предложить никаких лучших предложений.

Какие операции вы хотите часто выполнять со структурой данных? Собираетесь ли вы просто перебирать строки, искать строки, добавлять и удалять строки?

7
ответ дан 18 December 2019 в 09:52
поделиться

Если в какой-то момент инициализации вы знаете количество строк и вам не нужно выделять больше, вы можете просто использовать:

char **myStrings = (char **)malloc(numStrings*sizeof(*myStrings);

, а затем выделение для каждой строки:

for(int i=0; i<numStrings; i++)
    myStrings[i] = (char *)malloc(stringLength[i] + 1);

Вы тем не менее, при необходимости можно было бы выделить более динамично.

Если вам нужно динамически перераспределить массив строк:

myStrings = (char **)realloc(myStrings, numStringsNew*sizeof(myStrings));

или если конкретная строка должна изменить свою длину, просто перераспределите эту конкретную строку:

myStrings[the_one_to_realloc] = (char *)realloc(myStrings[the_one_to_realloc], stringLengthNew + 1);
3
ответ дан 18 December 2019 в 09:52
поделиться

Беги, не ходи, на веб-сайт Принстона и получай Дэйв Хэнсон Интерфейсы и реализации C . Структура данных под названием Seq_T идеально подходит для динамического создания списка строк. Дэйв не предоставляет читателя буферизации, но вы можете считывать строки в конечный буфер, преобразовывать результат с помощью Text_put , а если строка слишком велика для одного буфера, объединять результаты с помощью Text_cat . Код CII управляет всем динамическим ростом за вас.

2
ответ дан 18 December 2019 в 09:52
поделиться

Нет особых причин изобретать велосипед, в отличие от того, что предлагают некоторые ответы.

Не разрабатывайте свою собственную библиотеку, хотя существует несколько бесплатных программных библиотек, которые реализуют такие абстракции. Одним из примеров, среди прочего, является glib , который имеет много типов, таких как динамически растущие строки и динамически растущие списки .

2
ответ дан 18 December 2019 в 09:52
поделиться

Есть несколько структур данных, которые позволяют вам динамически расти. Как следует из двух предыдущих ответов, вы можете использовать массив указателей, связанный список и т. Д.

Все зависит от требований вашей реализации:

  1. Будете ли вы обращаться к этим строкам более одного раза?
  2. Как только вы их получите, собираетесь ли вы обращаться к ним всем (для некоторых вычислений) или по одной за раз время (например, словарь)?
  3. Что вы думаете о пространстве / памяти?
  4. Есть ли какое-то значение для порядка, в котором вы их получаете (предлагает очередь или реализацию стека)?
  5. Есть ли неотъемлемая часть связь между строками (предполагая древовидную или древовидную структуру)?

и т. д. Предлагаю прочитать немного о структурах данных и решить, что вам больше подходит. Все они могут быть реализованы на C.
Посмотрите эту статью в Википедии (перейдите в раздел «Примеры» для получения списка опций, если вы хотите пропустить теорию)

3
ответ дан 18 December 2019 в 09:52
поделиться

Для динамического хранения можно использовать флаг m для % s , как показано ниже:

char *variable;
scanf ("%ms", &variable);
/* use variable */
free(variable);

Строка, указанная переменной будет достаточно для хранения данных.

Обратите внимание, что вы обязаны освободить переменную после ее использования.

0
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: