Pergunta

Eu fiz uma pergunta semelhante ontem, mas reconhecer que eu preciso rephase-lo de uma maneira diferente.

Em suma: Em C ++ no Windows, como posso fazer uma pesquisa case-insensitive em uma string (dentro de outra string) quando as cordas estão em formato unicode (wide char, wchar_t), e eu não conheço a língua das cordas. Eu só quero saber se a agulha existe no palheiro. Localização da agulha não é relevante para mim.

Fundo: Eu tenho um repositório que contém um monte de corpos de e-mail. As mensagens estão em diferentes idiomas (japonês, alemão, russo, finlandês, o nome dele). Todos os dados estão no formato Unicode, e eu carregá-lo para cordas de largura (wchar_t) no meu aplicativo C ++ (os corpos foram MIME decodificados, então no meu depurador eu posso ver os japoneses reais, personagens alemão). Eu não sei o idioma das mensagens desde mensagens de e-mail doens não contêm esse detalhe, também um único corpo do email pode conter caracteres de vários idiomas.

Eu estou procurando algo como wcsstr, mas com a capacidade de fazer a busca de uma forma caso insensitve. Eu sei que não é possível fazer uma conversão de 100% adequada de maiúsculas para minúsculas, sem conhecer o idioma do texto. Eu quero uma solução que funciona nos casos de 99% onde é possível.

Estou usando o Visual Studio 2008 com C ++, STL e Boost.

Foi útil?

Solução

Aumento de Cordas Algoritmos tem um icontains ( ) modelo de função que pode fazer o que você precisa.

Outras dicas

Você tem que especificar o idioma para fazer caso comparação insensível. Por exemplo, em turco, 'i' não é a letra minúscula correspondente a 'I'. Se o idioma não parece estar especificado, então a comparação está sendo feito com uma linguagem implicitamente seleccionada.

Você deve usar a UTI biblioteca que fornece suporte para expressões regulares Unicode que seguem as regras Unicode para a correspondência de maiúsculas e minúsculas. A biblioteca está disponível como bibliotecas C / C ++ e Java. Muitas outras linguagens como Python apoiar um wrapper para as bibliotecas de UTI.

Você pode converter ambos agulha e palheiro para minúsculas (ou maiúscula), em seguida, fazer o wcsstr ().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top