C++ 中std::toupper函数将字符转换为大写形式详解

在 C++ 中,std::toupper 是一个标准库函数,用于将字符转换为大写形式。它定义在头文件 中。


一、函数原型

#include 

// C++ 标准库中的声明
int std::toupper(int ch);

二、功能说明

  • std::toupper(ch) 接收一个 字符(以 int 表示)
  • 如果 ch 是一个 小写字母(‘a’~‘z’),它会返回相应的大写字母(‘A’~‘Z’)。
  • 否则,它会返回原样字符(例如数字、标点、空格等不变)。

三、注意事项

  • 输入必须是 unsigned char 类型或 EOF,否则行为是未定义的(尤其是负值字符)。
  • 所以在处理 char 时,应当转换为 unsigned char 再传入:
std::toupper(static_cast<unsigned char>(ch));

四、常见用法示例

示例 1:转换单个字符为大写

#include 
#include 

int main() {
    char ch = 'b';
    char upper = std::toupper(static_cast<unsigned char>(ch));
    std::cout << ch << " -> " << upper << std::endl;
    return 0;
}

输出:

b -> B

示例 2:将字符串中所有字符转换为大写

#include 
#include 
#include 

int main() {
    std::string str = "Hello, World!";
    
    for (char& ch : str) {
        ch = std::toupper(static_cast<unsigned char>(ch));
    }

    std::cout << str << std::endl;
    return 0;
}

输出:

HELLO, WORLD!

示例 3:忽略非字母字符

#include 
#include 
#include 

int main() {
    std::string input = "123abc$%DEF!";
    
    for (char& ch : input) {
        if (std::isalpha(static_cast<unsigned char>(ch))) {
            ch = std::toupper(static_cast<unsigned char>(ch));
        }
    }

    std::cout << input << std::endl;
    return 0;
}

输出:

123ABC$%DEF!

五、与 std::tolower 区别

函数名 功能
std::toupper 转为大写字符
std::tolower 转为小写字符

两者配合可实现全大小写转换功能。


六、常见问题避免

错误用法 正确做法
std::toupper(ch) 直接用 char 变量 std::toupper(static_cast(ch))

因为某些 char 是负值(如中文或特殊字符),直接传入会导致未定义行为。


七、完整封装函数示例

#include 
#include 

// 将整个字符串转换为大写
std::string to_upper(const std::string& input) {
    std::string result = input;
    for (char& ch : result) {
        ch = std::toupper(static_cast<unsigned char>(ch));
    }
    return result;
}

如需支持 Unicode(如中文、全角字符等)的大写转换,需使用 ICUboost::locale 等库。std::toupper 仅适用于 ASCII/Latin 字符集。


你可能感兴趣的:(C++,c++,开发语言,字符转换为大写,字符串大小写转换,C++,标准库,toupper,算法)