📅  最后修改于: 2023-12-03 15:25:19.871000             🧑  作者: Mango
有时候,在字符串处理中,需要将字符串全部转换为小写,以便在比较字符串时忽略大小写的差异。C++中提供了一些库函数和STL算法可以实现这个功能。
C++标准库 <algorithm>
提供了一些字符转换函数,使用 std::transform()
算法可以将字符串中的每个字符应用这些函数来完成字符串转换。下面是使用 std::transform()
和 tolower()
函数将字符串全部转换为小写的示例代码:
#include <algorithm>
#include <cctype>
#include <string>
void toLower(std::string& str)
{
std::transform(str.begin(), str.end(), str.begin(),
[](unsigned char c){ return std::tolower(c); });
}
使用方法:
std::string str = "Hello, WORLD!";
toLower(str);
std::cout << str << std::endl;
// 输出:hello, world!
如果处理的字符串中包含多字节字符(比如UTF-8编码),那么上述代码就不能正确地工作了。需要使用宽字符集和 std::towlower()
函数来处理。同时需要注意迭代器的类型不能是 std::string::iterator
,而是应该使用 std::wstring::iterator
。下面是修正版代码:
#include <algorithm>
#include <cwctype>
#include <string>
void toLower(std::wstring& str)
{
std::transform(str.begin(), str.end(), str.begin(),
[](wchar_t c){ return std::towlower(c); });
}
使用方法:
std::wstring str = L"Hello, WORLD!"; // 注意L前缀
toLower(str);
wcout << str << endl;
// 输出:hello, world!
以上是将整个字符串转换为小写的两种C++实现方法。可以根据需要选择更适合的方法。如果涉及多字节字符,建议使用宽字符集与 std::towlower()
函数来处理。