让数组与toupper一起工作

时间:2012-02-28 04:37:26

标签: c++ arrays

出于某种原因,我不断收到错误消息“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;                        
}

3 个答案:

答案 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)

通过声明与函数同名的变量,导致了歧义。如前所述,只需更改变量的名称即可解决它。