0

c++ 中是否有一个函数可以将字符串从小写转换为大写,反之亦然?我需要比较两个不区分大小写的字符串,我只能转换其中一个字符串,而另一个字符串需要保持不变。

4

3 回答 3

4

您可以将std::toupperstd::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

于 2013-02-11T08:14:32.653 回答
1

可以将std::transformstd::toupperstd::tolower一起使用

std::string s("hello, world!");
std::transform(s.begin(), s.end(), s.begin(), (int (*)(int))std::toupper);
于 2013-02-11T08:15:11.203 回答
0

您可以使用:

  • std::tolower单击std::toupper 单击_std::transform _
  • 提升,就像在这个问题中一样
  • 正如您在问题中建议的那样,只需遍历字符串即可。要转换字符串中的每个字符,您将不得不遍历它。
于 2013-02-11T08:15:35.820 回答