質問

C ++でwchar_t文字列を大文字から小文字に変換するにはどうすればよいですか?

文字列には、日本語、中国語、ドイツ語、ギリシャ語の文字が混在しています。

けん引機の使用について考えました...

http://msdn.microsoft.com/ en-us / library / 8h19t214%28VS.80%29.aspx

..しかし、ドキュメントには次のように書かれています:

  

towlowerの大文字小文字変換はロケール固有です。大文字と小文字は、現在のロケールに関連する文字のみが変更されます。

編集:たぶん私がやっていることを説明する必要があります。ユーザーからUnicode検索クエリを受け取りました。もともとはUTF-8エンコードですが、ワイド文字に変換しています(言い方が間違っている可能性があります)。デバッガー(VS2008)では、<!> quot; variable quick watch <!> quot;に日本語、ドイツ語などの文字が正しく表示されます。 Unicodeの別のデータセットを調べて、検索文字列の一致を見つける必要があります。検索で大文字と小文字が区別される場合、これは私にとっては問題ありませんが、大文字と小文字を区別しないで行うことはより問題です。この問題を解決する私の(おそらく素朴な)アプローチは、すべての入力データと出力データを小文字に変換してから比較することです。

役に立ちましたか?

解決

文字列にこれらすべての文字が含まれる場合、コードセットはUnicodeベースでなければなりません。適切に実装されている場合、 Unicode (第4章「文字のプロパティ ')は、文字が大文字か小文字かなどの文字プロパティを定義します。

その前文を考えると、towlower()<wctype.h>関数が使用する正しいツールです。うまくいかない場合は、ベンダーと話し合うQoI(実装の品質)の問題があります。ベンダーが応答しない場合は、代替ライブラリを調べてください。この場合、 ICU (Unicodeの国際コンポーネント)を検討できます。

他のヒント

手に厄介な問題があります。日本語ロケールでは、ドイツ語の変換とその逆の変換はできません。キャプチャの概念も持たない言語もあります(toupper友人はここでは何もしないでしょう、私は思う)。それでは、文字列を同じ言語の個々の単語の塊に分割できますか?可能であれば、ピースを変換して、それらを結び付けることができます。

このSOの回答は、ファセットを使用して複数のロケールを操作する方法を示しています。これがWindowsの場合、win32 API関数の使用を検討できます。C++。NET(マネージC ++)で作業できる場合は、Unicode準拠のchar.ToLowerおよびstring.ToLower関数を使用できます。

_wcslwr_l<wchar.h>をご覧ください( MSDN )。

各ロケールの入力で関数を実行できるはずです。

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