首页 > 解决方案 > 如何将字符串全部大写?

问题描述

我正在做一个有趣的附带任务,并希望利用用户使用 ::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 不太熟悉,因为我从未了解过,因此感谢您的帮助。

标签: c++

解决方案


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;
}

推荐阅读