Подтвердить что ты не робот

Что-то вроде "расширенной" библиотеки строк C?

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

То, что я пропустил, работая с C, - это ассоциативные массивы и большие библиотеки строк. Есть ли библиотека, которая дает больше опций, чем string.h? Любые общие рекомендации, когда дело доходит до перехода со строками?

Спасибо за чтение-Патрик

4b9b3361

Ответ 1

Вы можете посмотреть Better String Library. Описание с сайта:

Лучшая строковая библиотека - это абстракция строкового типа данных который превосходит библиотеку C char тип строки буфера или С++ std::string. Среди функций достигнуты:

  • Существенное смягчение проблем с переполнением или переполнением буфера и другие сбои, возникающие в результате ошибочное использование общей строки C библиотечные функции
  • Значительно упрощенная обработка строк
  • Высокая совместимость с другие источники/библиотеки, которые ожидают '\ 0' завершенные буферы char
  • Улучшено общая производительность общей строки операции
  • Функциональная эквивалентность с другие более современные языки.

библиотека полностью автономна, портативный (известный для работы с gcc/g++, MSVС++, Intel С++, WATCOM C/С++, Turbo C, Borland С++, родной CC компилятор в Windows, Linux и Mac OS X), высокая производительность, простота в использовании и не входит в какую-либо другую коллекцию структур данных. Даже файлы ввода/вывода функции полностью абстрагированы (так что другие подобные потоку механизмы, как сокеты.) Тем не менее, он адекватен как полная замена строки C библиотека для манипулирования строками в любой C.

Ответ 2

GLib предоставляет множество предварительно созданных структур данных и функций обработки строк, но это набор функций и типов, полностью отделенных от "обычных", и это не очень легкая зависимость.

Если вместо этого С++ является жизнеспособной альтернативой вашей задаче, он объединяет в стандартную библиотеку строковый класс и несколько общих контейнеров (и многое другое можно найти в Boost).

Ответ 3

Что конкретно вы ищете в расширенной библиотеке c-string?

Один из способов улучшить работу на C - создать собственную библиотеку c-string. Затем сделайте его открытым исходным кодом, и пусть другие помогут его уточнить.

Я обычно не выступаю за создание собственных строковых литератур, но w.r.t. C, это отличный способ узнать C.

Ответ 4

Большая часть мощности C состоит в способности иметь прямой контроль над памятью как последовательность байтов. Это немного противоречит философии языка, чтобы рассматривать строки как нечто более высокое, чем это.

Я бы посоветовал перевернуть свой собственный очень простой. Это будет просветительский опыт, особенно для изучения арифметики и петель указателя.

Например, узнайте "Schlemiel the Painter algorithm" относительно strcat и создайте свою библиотеку для решения этой проблемы.

Ответ 5

POSIX дает вам <string.h>, <strings.h> и <regex.h>. Если вам действительно нужно больше библиотеки строк, чем это, C, вероятно, не подходит для этой конкретной работы.

Что касается хеш-таблицы, вы не можете получить хеш-таблицу с безопасным типом в C без множества неприятных макросов. Если у вас все в порядке, просто сохраняя void -pointers или выполняя ручную работу для каждого типа карты, тогда вам не должно быть недостатка в настройках. Кодирование собственной хеш-таблицы - это полуторачасовая обработка - просто найдите Stackoverflow для помощи с хэш-функцией. Если вы не хотите откатывать свои собственные, strmap [LGPL] выглядит прилично.

Ответ 7

Ассоциативный массив, связывающий строковые ключи и значения структуры в C, состоит из:

  • Хеш-функция для строк
  • Массив с простым числом элементов, внутри каждого из которых находится связанный список.
  • Элементы связанного списка, содержащие char *, указывают на сохраненные ключи и (необязательно) указатель struct * на соответствующее значение для каждого ключа.

Чтобы сохранить строковый ключ в вашем ассоциативном массиве:

  • Хешируйте это по модулю размеру простого массива.
  • В этом массиве bin добавьте его в связанный список.
  • Назначьте указатель на значение, которое вы добавляете.