出于某种原因,我不断收到错误消息“toupper不能用作函数”。但是对于我的低调的toupper是一个全局函数,它将小写字符转换为大写字母。
#include <cctype>
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string input;
string output;
int toupper;
cout<<"Enter a String of Charchters to be Capitalized : ";
cin>>input;
string arrayinput[20]= input;
output = toupper(arrayinput);
cout<<"\n\n\n"<<output<<"\n\n\n";
cout<<"Press <Enter> to Exit";
cin.ignore();
cin.get();
return 0;
}
答案 0 :(得分:3)
您已经创建了一个名为int toupper
的局部变量 - 将其重命名为其他变量。
编辑添加:
除此之外还有更多问题。 input
是一个字符串;你想迭代该字符串的长度,并使用char*
在每个位置获得string::at(i)
。然后使用atoi
将char转换为int,这是toupper
作为参数的类型。
答案 1 :(得分:1)
如果你想在一个字符串数组上做,那么在修复变量名称问题后,在循环中使用std::transform
:
for (auto& str : arrayinput)
std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper);
或者,如果您没有基于范围的,则可以使用for_each
:
std::for_each(std::begin(arrayinput), std::end(arrayinput), [](string& str) {
std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper);
});
答案 2 :(得分:0)
通过声明与函数同名的变量,导致了歧义。如前所述,只需更改变量的名称即可解决它。