これは前に尋ねられたが見つかりませんでした。 2つのwstringオブジェクトの大文字と小文字を区別しない比較が組み込まれていますか(つまり、std :: wstringのメソッドまたはアルゴリズムを使用していますか?wstringと大文字小文字を区別して比較する
答えて
あなたが<string.h>
int _wcsnicmp(
const wchar_t *string1,
const wchar_t *string2,
size_t count
);
で定義されているこの機能を使用することができますが、Microsoftの実装に縛られて気にしない場合は、最高のパフォーマンスをしたい場合は/互換性/機能性の比は、おそらくブーストライブラリ(その一部はとにかくです)を見なければなりません。 (別の質問にdifferent answerから取られた)単純な例:
#include <boost/algorithm/string.hpp>
std::wstring wstr1 = L"hello, world!";
std::wstring wstr2 = L"HELLO, WORLD!";
if (boost::iequals(wstr1, wstr2))
{
// Strings are identical
}
文字列リテラル – mloskot
std :: tolower()を使用して文字列を小文字に変換するか、関数wcscasecmpを使用してc_strの大文字と小文字を区別しない比較を実行できます。ここで
はあなたにも直接使用することができます数子の比較です:
struct ci_less_w
{
bool operator() (const std::wstring & s1, const std::wstring & s2) const
{
#ifndef _WIN32
return wcscasecmp(s1.c_str(), s2.c_str()) < 0;
#else
return _wcsicmp(s1.c_str(), s2.c_str()) < 0;
#endif
}
};
標準ライブラリソリューションが求められていたと思います。 –
あなたはブースト文字列アルゴリズムライブラリを使用することができます。あなたがregexをやろうとしない限り、そのヘッダのみのライブラリです。だからあなたは非常に簡単にそれを行うことができます。
http://www.boost.org/doc/libs/1_39_0/doc/html/string_algo.html
標準ライブラリを使用する:
bool comparei(wstring stringA , wstring stringB)
{
transform(stringA.begin(), stringA.end(), stringA.begin(), toupper);
transform(stringB.begin(), stringB.end(), stringB.begin(), toupper);
return (stringA == stringB);
}
wstring stringA = "foo";
wstring stringB = "FOO";
if(comparei(stringA , stringB))
{
// strings match
}
#include <algorithm>
#include <string>
#include <cstdio>
bool icase_wchar_cmp(wchar_t a, wchar_t b)
{
return std::toupper(a) == std::toupper(b);
}
bool icase_cmp(std::wstring const& s1, std::wstring const& s2)
{
return (s1.size() == s2.size()) &&
std::equal(s1.begin(), s1.end(), s2.begin(),
icase_wchar_cmp);
}
int main(int argc, char** argv)
{
using namespace std;
wstring str1(L"Hello"), str2(L"hello");
wprintf(L"%S and %S are %S\n", str1.c_str(), str2.c_str(),
icase_cmp(str1,str2) ? L"equal" : L"not equal");
return 0;
}
右英語の話?! (!==演算子を使用した場合、または=)あなたは、文字列は常に大文字小文字を区別しないcomparation作ることが必要な場合、私は私の素敵なブースト:)
bool isequal(const std::wstring& first, const std::wstring& second)
{
if(first.size() != second.size())
return false;
for(std::wstring::size_type i = 0; i < first.size(); i++)
{
if(first[i] != second[i] && first[i] != (second[i]^32))
return false;
}
return true;
}
となるだろうが、その後、可能なエレガントな解決策はchar_traitsを再定義することです。 :メソッドを比較する。
独自の構造を定義します。その大文字と小文字を区別しない比較はロケールに依存している、
typedef std::basic_string< wchar_t, my_wchar_traits> my_wstring;
- 1. Drools:大文字と小文字を区別しない比較?
- 2. Freemarker大文字小文字を区別しない比較
- 3. 大文字と小文字を区別しない文字列の比較C++
- 4. 大文字と小文字を区別しない文字列比較(I18Nテキスト)
- 5. ShouldBeEquivalentToをExcludeと大文字と小文字の区別なしで比較
- 6. ABAP OpenSQL SELECTで大文字と小文字を区別しない比較
- 7. 大文字小文字を区別しないで比較する
- 8. 大文字小文字の区別がない文字列の比較
- 9. 大文字と小文字を区別して文字列を比較する方法
- 10. 大文字と小文字の区別
- 11. PHPの文字列を比較する際の大文字と小文字の区別を無視します
- 12. 大文字と小文字を区別しないで文字列を比較する方法C#?
- 13. 大文字と小文字の区別から大文字小文字を区別しないものへ
- 14. 大文字と小文字を区別して置換する
- 15. パペットでの大文字と小文字を区別する文字列の比較
- 16. C#文字列の比較大文字と小文字の区別を無視するHTMLタグ
- 17. 文字列の辞書順比較[大文字と小文字を区別しない]
- 18. Juliaの大文字と小文字を区別しない文字列の比較
- 19. VB6の文字列比較は大文字と小文字を区別しませんか?
- 20. 大文字小文字の区別SSIS
- 21. indexOf大文字小文字の区別?
- 22. マッチング大文字と小文字を区別Unicode文字列
- 23. シンタックスハイライト、大文字と小文字を区別しない構文
- 24. HQLで大文字と小文字を区別して比較できますか?
- 25. HTMLは大文字と小文字を区別しますか?
- 26. AutoMapperは大文字と小文字を区別しますか?
- 27. HTML.Partialは大文字と小文字を区別しますか?
- 28. PHP strpos()は大文字と小文字を区別します
- 29. メタキーワードは大文字と小文字を区別しますか?
- 30. は:大文字と小文字を区別しますか?
注:例
次に、あなた自身の大文字小文字を区別しない文字列を定義します。 – avakarhttp://stackoverflow.com/questions/11635/case-insensitive-string-comparison-in-cを参照してください。私はBoostソリューションか、c_strの抽出とwcscasecmp/_wcsicmpの使用をお勧めします。 – Hasturkun
@Hasturkun:リンクありがとう。私はぼんやりとこのことを覚えていました。 – Naveen