void
main()
{
std::string str1 = "abracadabra";
std::string str2 = "AbRaCaDaBra";
if (!str1.compare(str2)) {
cout << "Compares"
}
}
Comment puis-je faire ce travail? Rendre fondamentalement la casse ci-dessus insensible. Question connexe Je googlé et ici
http://msdn.Microsoft.com/en-us/library/zkcaxw5y.aspx
il existe une méthode sensible à la casse String :: Compare (str1, str2, Bool). La question est de savoir comment cela est lié à ma façon de faire.
Vous pouvez créer une fonction de prédicat et l'utiliser dans std::equals
pour effectuer la comparaison:
bool icompare_pred(unsigned char a, unsigned char b)
{
return std::tolower(a) == std::tolower(b);
}
bool icompare(std::string const& a, std::string const& b)
{
if (a.length()==b.length()) {
return std::equal(b.begin(), b.end(),
a.begin(), icompare_pred);
}
else {
return false;
}
}
Maintenant, vous pouvez simplement faire:
if (icompare(str1, str)) {
std::cout << "Compares" << std::endl;
}
Covert à la fois minuscule et ensuite les comparer.
Conversion pour abaisser:
for(int i = 0; i < str1.size(); i++)
{
str[i] = tolower(str[i]);
}
Comparer des chaînes:
if (str1.compare(str2) == 0) { ... }
Une valeur nulle indique que les deux chaînes sont égales.
MODIFIER
Ceci peut être utilisé pour éviter une boucle: http://www.cplusplus.com/reference/algorithm/transform/
std::transform(in.begin(),in.end(),std::back_inserter(out),tolower);