Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 让阵列与toupper一起工作_C++_Arrays - Fatal编程技术网

C++ 让阵列与toupper一起工作

C++ 让阵列与toupper一起工作,c++,arrays,C++,Arrays,出于某种原因,我一直收到一个错误,上面写着“toupper不能用作函数”。但在我看来,toupper是一个将小写字符转换为大写的全局函数 #include <cctype> #include <iostream> #include <string> using namespace std; int main () { string input; string output; in

出于某种原因,我一直收到一个错误,上面写着“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;                        
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
字符串输入;
字符串输出;
内特图珀;
库廷普特;
字符串arrayinput[20]=输入;
输出=toupper(arrayinput);

cout您已经创建了一个名为
inttoupper
的局部变量-将该变量重命名为其他变量

编辑以添加:
问题不止于此。
input
是一个字符串;您希望迭代该字符串的长度,并使用
string::at(i)在每个位置获取
char*
。然后使用
atoi
将字符转换为int,int是
toupper
作为参数的类型。

您已经创建了一个名为
inttoupper
的局部变量-将该变量重命名为其他变量

编辑以添加:
问题不止于此。
input
是一个字符串;您希望迭代该字符串的长度,并使用
string::at(i)在每个位置获取
char*
。然后使用
atoi
将字符转换为int,int是
toupper
作为参数的类型。

如果要在字符串数组上执行此操作,则在解决变量名问题后,在循环中使用
std::transform

for (auto& str : arrayinput)
    std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper);
或者,如果没有基于范围的,则可以对每个使用

std::for_each(std::begin(arrayinput), std::end(arrayinput), [](string& str) {
    std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper);
});

如果要在字符串数组上执行此操作,则在修复变量名问题后,在循环中使用
std::transform

for (auto& str : arrayinput)
    std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper);
或者,如果没有基于范围的,则可以对每个使用

std::for_each(std::begin(arrayinput), std::end(arrayinput), [](string& str) {
    std::transform(std::begin(str), std::end(str), std::begin(str), ::toupper);
});


您通过声明与函数同名的变量造成了歧义。如前所述,只需更改变量名称即可解决此问题。

您通过声明与函数同名的变量造成了歧义。如前所述,只需更改变量名称即可“`string arrayinput[20]=input`应该做什么呢?把输入变成一个array@kd7vdb:这不是它的工作原理。你不能只接受一个
std::string
并“将其放入数组”。那么,获取并生成某种类型的输入并将其放入一个字符数组会更容易吗?`string arrayinput[20]=input`应该做什么?获取输入并将其放入array@kd7vdb:这不是它的工作原理。你不能只接受一个
std::string
并“将其放入数组”.那么,获取并生成某种类型的输入并将其生成一个字符数组会更容易吗?我删除了toupper变量,现在出现了一个错误“从
std::string*'到
int'的无效转换”to upper是否必须是整数?@kd7vdb,否,只需重命名/删除toupper变量。这会给您带来错误,因为该变量与函数本身具有相同的名称。据我所知,这是因为您正在传递数组(更具体地说是指向数组第一个元素的指针)对于函数的字符串,您需要传递数组的实际元素,例如arrayinput[5]我删除了toupper变量,现在我得到一个错误“从
std::string*'到
int*的转换无效”to upper是否必须是整数?@kd7vdb,否,只需重命名/删除toupper变量。这会给您带来错误,因为该变量与函数本身具有相同的名称。据我所知,这是因为您正在传递数组(更具体地说是指向数组第一个元素的指针)对于函数的字符串,需要传递数组的实际元素,例如arrayinput[5]上面我描述了如何将您的
字符串
转换为
toupper
使用的数据类型,但如果您能坚持使用
字符串
,就像这里一样,那将是首选。@tPearce否,
toupper
返回字符的ASCII码,因此您不需要来回转换。而使用
itoa
是用于co将一个像
5
这样的数字输入字符串
“5”
,这在这种情况下是没有用的。啊,没错。(我不使用itoa或atoi-go字符串!)上面我描述了如何将您的
字符串
转换为
toupper
使用的数据类型,但如果您能坚持使用
字符串
,就像这里一样,那将是首选。@tPearce否,
toupper
返回字符的ASCII码,因此您不需要来回转换。而使用
itoa
是用于co将一个像
5
这样的数字输入字符串
“5”
,这在这种情况下是没有用的。啊,没错。(我不使用itoa或atoi-go字符串!)