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

Хорошая библиотека управления строками С++

Прошу прощения за пылающий std::string и std:: wstring. Они довольно ограничены и далеки от того, чтобы быть потокобезопасными. Производительность мудрая, они не так уж хороши. Я пропускаю простые функции:

  • Разделение строки на массив/вектор/список
  • Простая и интуитивная нечувствительная к регистру нахождение и замена
  • Поддержка i18n, не беспокоясь о строке или wstring
  • Преобразование в и из int, float, double
  • Преобразование в и из UTF-8, UTF-16 и других кодировок
  • поточно-/возвратного
  • Малый размер и отсутствие зависимостей
  • Высокопроизводительная и кросс-платформенная

Я нашел Qt QString полезным и также нашел CBString http://bstring.sourceforge.net/bstrFAQ.shtml

Любые другие предложения и сравнения? Спасибо.

4b9b3361

Ответ 2

Библиотека инструментов С++ String Toolkit (StrTk) - это бесплатная библиотека, которая состоит из надежных, оптимизированных и переносимых общих алгоритмов обработки строк и процедур для языка С++. Библиотека предназначена для простой в использовании и интеграции в существующем коде.

Библиотека имеет следующие возможности:

  • Общий токенизатор строк и итераторы токенов
  • Сплит-процедуры
  • Пользовательские политики разделителей и разделителей (простые и регулярные выражения и т.д.).
  • Конверсии между данными и шестнадцатеричным и базовым 64
  • Процедуры удаления и замены на месте
  • Согласование и глобулизация Wild-карт
  • Быстрая обработка 2D-токенов
  • Расширяемые шаблоны обработки строк

и многое другое...

Совместимые компиляторы С++:

  • GCC 4.0 +
  • Компилятор Intel С++ 9.0 +
  • Microsoft Visual С++ 8.0 +
  • Comeau C/С++ 4.1+

Источник:

Ответ 3

Я не уверен, что согласен. Строки действительно не должны быть потокобезопасными из-за накладных расходов, за исключением подсчета ссылок, если это применимо. Большинство других функций, которые вы хотите, превратили бы струны в мусорную баржу. Аналогично, удаление зависимостей удалит их способность хорошо работать с потоками.

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

Ответ 4

Bstring - Хотя я и не пробовал это самостоятельно, набор функций и скорость, представленные на их сайте. По вашему выбору лицензии GPL или BSD также является хорошей степенью свободы.

Кроме того, название предлагает лучше, так как они могут лгать?:)

Ответ 5

Я нашел wxString удобным в использовании и имеет множество функций. Хотя это часть большой библиотеки (wxWidgets) и, возможно, слишком большая, когда вы просто хотите использовать строки. Он также работает без компонентов GUI, когда вы просто используете wxBase, который содержит wxString и несколько других компонентов.

EDIT: здесь ссылка в документацию. Он принимает стандартные функции std::string, а также некоторые другие. Я всегда считаю, что BeforeFirst() и AfterFirst() очень удобны, когда мне приходится разбирать текст. И это действительно хорошо документировано.

Ответ 6

Для преобразования вы всегда можете сломать и использовать C-библиотеку cstdlib.

#include <cstlib>
#include <iostream>

int main()
{
   std::string num;

   std::cin >> num;

   someFunc(atoi(num));
   someOtherFunc(atof(num));
   return 0;
}

atoi = ascii - целое число atof = ascii для плавания

Как и для поиска, используйте функцию STL " find", определенную в алгоритме заголовка, или find_first_of (или подобное). Я также считаю, что вы можете инициализировать вектор char с помощью std::string, но это гипотеза.

Ответ 7

Я настоятельно рекомендую использовать ICU UnicodeString, поскольку он поддерживает все общие функции манипуляции строками, а также поддерживает i18n.

Не знаю, что такое ОИТ? Вот выдержка из Wikipedia:

Международные компоненты для Unicode (ICU) - это проект с открытым исходным кодом зрелых библиотек C/С++ и Java для поддержки Unicode, интернационализации программного обеспечения и глобализации программного обеспечения. ICU широко переносится во многие операционные системы и среды. Он дает приложениям одинаковые результаты на всех платформах и между C, С++ и программным обеспечением Java. Проект ICU финансируется, поддерживается и используется IBM и многими другими компаниями.