C++ 让阵列与toupper一起工作
出于某种原因,我一直收到一个错误,上面写着“toupper不能用作函数”。但在我看来,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
#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字符串!)