c ++中是否有一个函数可以将字符串从小写转换为大写,反之亦然?我需要比较两个不区分大小写的字符串,我只能转换其中一个字符串,而另一个字符串需要完整。
答案 0 :(得分:4)
您可以将std::toupper
或std::tolower
与 std::for_each
std::transform
结合使用。
#include <cctype>
#include <algorithm>
#include <string>
#include <iostream>
int main()
{
std::string s = "Hello, World!";
std::transform(s.begin(), s.end(), s.begin(), [](char c) {return std::toupper(c);});
std::cout << s << "\n";
}
修改强>
我需要比较两个不区分大小写的字符串,我只能转换其中一个字符串而另一个字符串需要完整。
您可以定义一个对两个字符执行不区分大小写的比较的函数,然后将其与std::equal
一起使用:
bool case_insensitive_comp(char lhs, char rhs)
{
return std::toupper(lhs) == std::toupper(rhs);
}
int main()
{
std::string s1 = ....;
std::string s2 = ....;
bool match = std::equal(s1.begin(), s1.end(), s2.begin(), case_insensitive_comp);
}
在调用std::equal
之前,您可能需要检查字符串的长度是否相同。
答案 1 :(得分:1)
可以将std::transform与std::toupper或std::tolower
一起使用std::string s("hello, world!");
std::transform(s.begin(), s.end(), s.begin(), (int (*)(int))std::toupper);
答案 2 :(得分:0)