質問

昨日、同様の質問をしましたが、別の方法でリフェーズする必要があることを認識しています。

要するに: Windows上のC ++で、文字列がUnicode形式(ワイド文字、wchar_t)で、文字列の言語がわからない場合に、文字列(別の文字列内)の大文字と小文字を区別しない検索を行う方法針が干し草の山にあるかどうかを知りたいだけです。針の位置は私には関係ありません。

背景: 多数のメール本文を含むリポジトリがあります。メッセージはさまざまな言語(日本語、ドイツ語、ロシア語、フィンランド語、あなたが名前を付けています)です。すべてのデータはUnicode形式であり、C ++アプリケーションのワイド文字列(wchar_t)にロードします(本文はMIMEデコードされているため、デバッガーでは実際の日本語、ドイツ語の文字を見ることができます)。メールメッセージにはその詳細が含まれていないため、メッセージの言語はわかりません。また、1つのメール本文に複数の言語の文字が含まれている場合があります。

wcsstrのようなものを探していますが、大文字と小文字を区別しない方法で検索を実行できます。テキストの言語を知らずに、大文字から小文字に100%適切に変換することは不可能であることを知っています。 99%のケースで機能するソリューションが必要です。

C ++、STL、BoostでVisual Studio 2008を使用しています。

役に立ちましたか?

解決

Boost String Algorithmsには、 icontains( )必要なことを行うことができる関数テンプレート。

他のヒント

大文字と小文字を区別しない比較を行うには、言語を指定する必要があります。たとえば、トルコ語では、「i」は「I」に対応する小文字ではありません。言語が指定されていないように見える場合、暗黙的に選択された言語で比較が行われています。

Unicodeルールに従うUnicode正規表現のサポートを提供する ICUライブラリを使用する必要があります大文字と小文字を区別しないマッチング。このライブラリは、C / C ++およびJavaライブラリとして利用できます。 Pythonなどの他の多くの言語は、ICUライブラリのラッパーをサポートしています。

needleとhaystackの両方を小文字(または大文字)に変換してから、wcsstr()を実行できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top