我需要将 C++ 中的字符串转换为完全大写。我一直在寻找一段时间,并找到了一种方法:
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
int main()
{
string input;
cin >> input;
transform(input.begin(), input.end(), input.begin(), toupper);
cout << input;
return 0;
}
不幸的是,这不起作用,我收到了以下错误消息:
没有匹配函数调用’transform(std::basic_string::iterator, std::basic_string::iterator, std::basic_string::iterator,
我尝试了其他也不起作用的方法。这是最接近工作的地方。
所以我要问的是我做错了什么。也许我的语法不好,或者我需要包含一些东西。我不知道。
我的大部分信息都在这里: http ://www.cplusplus.com/forum/beginner/75634/(最后两个帖子)
原文由 Thomas W. 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要在
toupper
之前放置一个双冒号:解释:
有两种不同的
toupper
功能:toupper
在全局命名空间中(使用::toupper
访问),来自 C.toupper
在std
命名空间中(使用std::toupper
访问),它有多个重载,因此不能简单地用一个名称来引用。您必须将其显式转换为特定的函数签名才能被引用,但获取函数指针的代码看起来很难看:static_cast<int (*)(int)>(&std::toupper)
由于您是
using namespace std
,因此在编写toupper
时,2. 隐藏 1. 并因此根据名称解析规则被选择。