Pregunta

Hice una pregunta similar ayer, pero reconozco que debo volver a configurarlo de una manera diferente.

En resumen: En C ++ en Windows, ¿cómo hago una búsqueda que no distinga mayúsculas y minúsculas para una cadena (dentro de otra cadena) cuando las cadenas están en formato Unicode (wide char, wchar_t), y no sé el idioma de las cadenas? Solo quiero saber si la aguja existe en el pajar. La ubicación de la aguja no es relevante para mí.

Fondo: Tengo un repositorio que contiene una gran cantidad de cuerpos de correo electrónico. Los mensajes están en diferentes idiomas (japonés, alemán, ruso, finlandés; lo que sea). Todos los datos están en formato Unicode, y los cargué en cadenas anchas (wchar_t) en mi aplicación C ++ (los cuerpos se han decodificado MIME, por lo que en mi depurador puedo ver los caracteres japoneses y alemanes reales). No sé el idioma de los mensajes, ya que los mensajes de correo electrónico no contienen ese detalle, además, un solo cuerpo de correo electrónico puede contener caracteres de varios idiomas.

Estoy buscando algo como wcsstr, pero con la capacidad de hacer la búsqueda de una manera insensible. Sé que no es posible hacer una conversión 100% adecuada de mayúsculas a minúsculas, sin saber el idioma del texto. Quiero una solución que funcione en el 99% de los casos donde sea posible.

Estoy usando Visual Studio 2008 con C ++, STL y Boost.

¿Fue útil?

Solución

Boost String Algorithms tiene un icontains ( ) plantilla de función que puede hacer lo que necesite.

Otros consejos

Tienes que especificar el idioma para hacer una comparación entre mayúsculas y minúsculas. Por ejemplo, en turco, 'i' NO es la letra minúscula correspondiente a 'I'. Si el idioma parece no estar especificado, entonces la comparación se está haciendo con un idioma seleccionado implícitamente.

Debería usar la biblioteca de ICU que proporciona soporte para las expresiones regulares de Unicode que siguen las reglas de Unicode para emparejamientos insensibles a mayúsculas y minúsculas. La biblioteca está disponible como bibliotecas C / C ++ y Java. Muchos otros idiomas, como Python, admiten un contenedor para las bibliotecas de ICU.

puede convertir tanto la aguja como el pajar a minúsculas (o mayúsculas) y luego hacer wcsstr ().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top