que - Buena biblioteca de manipulación de cadenas en C++
listado de librerias c++ (7)
Encontré wxString conveniente de usar y tiene muchas características. Aunque es parte de una biblioteca más grande (wxWidgets) y tal vez demasiado grande cuando solo quieres usar cadenas. También funciona sin componentes GUI cuando solo usa wxBase que contiene el wxString y algunos ''otros'' componentes.
EDITAR: aquí hay un link a la documentación. Acepta las funciones estándar de std :: string y también algunas otras. Siempre encuentro que BeforeFirst () y AfterFirst () siempre son muy convenientes cuando tengo que analizar texto. Y está realmente bien documentado.
Lo siento por flaming std :: string y std :: wstring. Son bastante limitados y están lejos de ser seguros para hilos. En cuanto al rendimiento, tampoco son tan buenos. Echo de menos las características simples:
- Dividir una cadena en matriz / vector / lista
- Encontrar & reemplazar insensible a mayúsculas / minúsculas simple e intuitivo
- Soporte para i18n sin preocuparse por string o wstring
- Conversión ay desde int, float, double
- Conversión a y desde UTF-8, UTF-16 y otras codificaciones
- Thread-safe / reentrant
- Tamaño pequeño y sin dependencias
- Altamente portátil y multiplataforma
He encontrado que Qt QString es útil y también he encontrado CBString http://bstring.sourceforge.net/bstrFAQ.shtml
¿Alguna otra sugerencia y comparación? Gracias.
La biblioteca de algoritmos de cadenas de C ++ de Boost tiene prácticamente todas las características que necesita.
La biblioteca C ++ String Toolkit (StrTk) es una biblioteca gratuita que consiste en algoritmos y procedimientos robustos, optimizados y portátiles de procesamiento de cadenas genéricas para el lenguaje C ++. La biblioteca está diseñada para ser fácil de usar e integrar dentro del código existente.
La biblioteca tiene las siguientes capacidades:
- Tokenizador de cadenas genéricas e iteradores de tokens
- Rutinas divididas
- Políticas de separador y delimitador especificadas por el usuario (basadas en expresiones simples y expresiones regulares, etc.)
- Conversiones entre datos y hexadecimal y base-64
- Retiro in situ y rutinas de reemplazo
- Emparejamiento de comodines y globoflexia
- Rápido procesamiento de cuadrícula 2D token
- Plantillas de procesamiento de cadenas extensibles
y mucho más ...
Compiladores C ++ compatibles:
- GCC 4.0+
- Compilador Intel C ++ 9.0+
- Microsoft Visual C ++ 8.0+
- Comeau C / C ++ 4.1+
Fuente:
No estoy seguro de estar de acuerdo. Las cadenas realmente no deberían ser seguras para hilos debido a la sobrecarga, excepto para el recuento de referencias, si corresponde. La mayor parte de la otra funcionalidad que desea convertiría cadenas en una barcaza de basura. Del mismo modo, eliminar las dependencias eliminaría su capacidad de funcionar bien con las transmisiones.
Lo único que sugeriría es que podríamos beneficiarnos de una clase de cadena inmutable, particularmente una que no tenga la propiedad o la terminación de la memoria. Ya los escribí antes y pueden ser muy útiles.
Para la conversión, siempre puede descomponer y usar la biblioteca C cstdlib.
#include <cstlib>
#include <iostream>
int main()
{
std::string num;
std::cin >> num;
someFunc(atoi(num));
someOtherFunc(atof(num));
return 0;
}
atoi = ascii a entero atof = ascii a flotar
En cuanto a find, use la función STL " find " definida bajo el algoritmo header, o find_first_of (o similar). También creo que puedes inicializar un vector de char con std :: string, pero eso es una conjetura.
Recomiendo utilizar el UnicodeString
ICU , ya que admite todas las funciones comunes de manipulación de cadenas, así como el soporte de i18n.
¿No sabes qué es la UCI? Aquí hay un extracto de Wikipedia :
International Components for Unicode (ICU) es un proyecto de fuente abierta de bibliotecas maduras de C / C ++ y Java para soporte de Unicode, internacionalización de software y globalización de software. La UCI es ampliamente portátil para muchos sistemas operativos y entornos. Le da a las aplicaciones los mismos resultados en todas las plataformas y entre el software C, C ++ y Java. El proyecto ICU está patrocinado, respaldado y utilizado por IBM y muchas otras compañías.
Bstring : aunque nunca lo intenté, el conjunto de funciones y la velocidad se presentaron en su sitio. Bajo su elección de licencia GPL o BSD también es un buen grado de libertad.
Además, el nombre sugiere que es mejor, ¿cómo pueden mentir? :)