1

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

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

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

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

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

4

4 に答える 4

4

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

于 2009-10-24T21:38:54.723 に答える
1

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

于 2009-10-24T12:36:11.593 に答える
0

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

于 2009-10-24T12:44:14.900 に答える
0

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

于 2009-10-24T21:17:12.910 に答える