c++ - 如何将字符串全部大写?
问题描述
我正在做一个有趣的附带任务,并希望利用用户使用 ::toupper 输入的任何内容的输出,但我正在努力。这就是我到目前为止所拥有的;
#include <cctype>
#include<iostream>
#include<iomanip>
#include <string>
using namespace std;
int const ROWS = 4;
int const COLUMNS = 3;
void userInputValues(string myArray[ROWS][COLUMNS]);
void printValues(const string myArray[ROWS][COLUMNS]);
int main()
{
string myArray[ROWS][COLUMNS];
userInputValues(myArray);
printValues(myArray);
return 0;
}
void userInputValues(string myArray[ROWS][COLUMNS])
{
int index = 0;
cout << "Enter 12 names" << endl;
for(int row = 0; row < ROWS; ++row)
{
for(int column = 0; column < COLUMNS; ++column)
{
cout << ++index << ". Enter a name: ";
getline(cin, myArray[row][column]);
}
}
cout << endl;
}
void printValues(const string myArray[ROWS][COLUMNS])
{
for (int row = 0; row < ROWS; ++row)
{
for (int column = 0; column < COLUMNS; ++column)
{
cout << setw(3) << ::toupper (myArray[row][column]) << " ";
}
cout << endl;
}
}
当我运行我得到的代码时,“错误:无法将 'const string {aka const std::basic_string}' 转换为 'int' 以将参数 '1' 转换为 'int toupper(int)'”我有点明白这是因为我不能将字符串作为 int 传递。但是我不知道从那里去哪里。另外,我对 toupper 不太熟悉,因为我从未了解过,因此感谢您的帮助。
解决方案
std::toupper 按字符工作,因此您需要创建一个函数来接收字符串并返回其大写版本。您可以使用传统的 for 循环来遍历输入字符串中的每个字符并将其覆盖,或者您可以使用 std::transform 并传入输入字符串迭代器 + 要应用的转换(在本例中为 lambda)做同样的事情。您可以在https://en.cppreference.com/w/cpp/algorithm/transform阅读 std::transform 。
#include <algorithm>
std::string StringToUpper(const std::string & iString)
{
std::string oString = iString;
std::transform(oString.begin(), oString.end(), oString.begin(),
[](unsigned char c) { return std::toupper(c); }
);
return oString;
}
推荐阅读
- css - 将元素缩放到父高度,保持其比例,但保持其相对位置
- c - 具有重复值和大于/小于输入值的节点数的二叉搜索树?
- java - JAVA中如何比较枚举的值
- c# - 为什么电报不响应此代码中的命令?
- java - 使用 postgresql 在 Wildfly 上连接数据库的问题
- nginx - 我在 Nginx 中从 http 到 https 的重定向不起作用
- ios - 使用 Swift JSON 的 Swift 5 中的 JSON 对象,我如何制作这样的 JSON 对象:
- mongodb - MongoDB-来自聚合结果的数组
- neovim - Neovim 错误:E492:不是编辑器命令:PlugInstall
- swift - 可编码的 [String: Any] 字典