Domanda

Ieri ho posto una domanda simile, ma riconosco che devo riformularla in modo diverso.

In breve: In C ++ su Windows, come posso fare una ricerca senza distinzione tra maiuscole e minuscole per una stringa (all'interno di un'altra stringa) quando le stringhe sono in formato unicode (wide char, wchar_t) e non conosco la lingua delle stringhe. Voglio solo sapere se l'ago esiste nel pagliaio. La posizione dell'ago non è rilevante per me.

Sfondo: Ho un repository che contiene molti corpi email. I messaggi sono in diverse lingue (giapponese, tedesco, russo, finlandese; tu lo chiami). Tutti i dati sono in formato Unicode e li carico su stringhe larghe (wchar_t) nella mia applicazione C ++ (i corpi sono stati decodificati MIME, quindi nel mio debugger posso vedere i caratteri giapponesi, tedeschi effettivi). Non conosco la lingua dei messaggi poiché i messaggi di posta elettronica non contengono quel dettaglio, inoltre un singolo corpo di email può contenere caratteri di diverse lingue.

Sto cercando qualcosa come wcsstr, ma con la possibilità di fare la ricerca in modo insensibile al caso. So che non è possibile effettuare una conversione corretta al 100% da lettere maiuscole a lettere minuscole, senza conoscere la lingua del testo. Voglio una soluzione che funzioni nel 99% dei casi in cui è possibile.

Sto usando Visual Studio 2008 con C ++, STL e Boost.

È stato utile?

Soluzione

Boost String Algorithms ha un icontains ( ) modello di funzione che può fare ciò di cui hai bisogno.

Altri suggerimenti

Devi specificare la lingua per eseguire il confronto senza distinzione tra maiuscole e minuscole. Ad esempio, in turco, "i" NON è la lettera minuscola corrispondente a "I". Se la lingua sembra non essere specificata, il confronto viene eseguito con una lingua implicitamente selezionata.

È necessario utilizzare la libreria ICU che fornisce supporto per le espressioni regolari Unicode che seguono le regole Unicode per la corrispondenza senza distinzione tra maiuscole e minuscole. La libreria è disponibile come librerie C / C ++ e Java. Molti altri linguaggi come Python supportano un wrapper per le librerie ICU.

potresti convertire sia l'ago che il pagliaio in minuscolo (o maiuscolo), quindi esegui wcsstr ().

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top