在 C++ 中比较两个字符串时如何忽略文本大小写?
How to ignore text case while comparing two strings in C++?
我是初学者。我正在尝试创建一个程序来比较两个字符串 按字母顺序 。但它会忽略文本大小写。我面临着问题。如何忽略 C++ 中的文本大小写?
#include <iostream>
using namespace std;
int main() {
string a, b;
cin >> a;
cin >> b;
if ( a > b) {
cout << "1";
}
else if ( a < b) {
cout << "-1";
}
else if (a == b) {
cout << "0";
}
}
您可以在比较之前将两个字符串都转换为小写 std::tolower
:
for (auto& c : a) c = std::tolower(static_cast<unsigned char>(c));
for (auto& c : b) c = std::tolower(static_cast<unsigned char>(c));
我建议使用循环并使用 std::toupper
或 std::tolower
将两个字符串转换为小写或小写
for(const auto& i:a)x=std::tolower(x);
for(const auto& i:a)x=std::tolower(x);
使用 case-insensitive 比较函数,例如 C 的 strcmpi()
,或 Windows 的 CompareStringA()
与 NORM_IGNORECASE
标志,或 Posix 的 strcasecmp()
,等等
我是初学者。我正在尝试创建一个程序来比较两个字符串 按字母顺序 。但它会忽略文本大小写。我面临着问题。如何忽略 C++ 中的文本大小写?
#include <iostream>
using namespace std;
int main() {
string a, b;
cin >> a;
cin >> b;
if ( a > b) {
cout << "1";
}
else if ( a < b) {
cout << "-1";
}
else if (a == b) {
cout << "0";
}
}
您可以在比较之前将两个字符串都转换为小写 std::tolower
:
for (auto& c : a) c = std::tolower(static_cast<unsigned char>(c));
for (auto& c : b) c = std::tolower(static_cast<unsigned char>(c));
我建议使用循环并使用 std::toupper
或 std::tolower
for(const auto& i:a)x=std::tolower(x);
for(const auto& i:a)x=std::tolower(x);
使用 case-insensitive 比较函数,例如 C 的 strcmpi()
,或 Windows 的 CompareStringA()
与 NORM_IGNORECASE
标志,或 Posix 的 strcasecmp()
,等等