C++ 中大小写字母的转化

在C++中,大小写字母之间的转换可以通过几种方法实现。以下是常见的几种方式:

1. 利用ASCII码差值

由于所有小写字母的ASCII码比对应的大写字母小32,可以简单地通过加减32来进行转换:

#include <iostream>
using namespace std;

int main() {
    char lower = 'a';
    char upper = 'A';

    // 小写转大写
    upper = lower - 32;
    // 大写转小写
    lower = upper + 32;

    cout << "小写转大写: " << lower << endl;
    cout << "大写转小写: " << upper << endl;

    return 0;
}

2. 使用C++标准库函数(<cctype> 或 <ctype.h>)

#include <cctype> // C++ 版本
// 或者
#include <ctype.h> // C 版本兼容

int main() {
    char c = 'a';

    // 使用 toupper 函数将字符转为大写
    char upper_c = toupper(c);
    
    // 使用 tolower 函数将字符转为小写
    char lower_c = tolower('A');

    cout << "小写转大写: " << upper_c << endl;
    cout << "大写转小写: " << lower_c << endl;

    return 0;
}

3. 使用 std::transform 和 std::locale(对于非ASCII字符集可能更可靠)

#include <algorithm>
#include <locale>

int main() {
    string str = "Hello World!";
    std::locale loc;

    // 转换为全大写
    std::transform(str.begin(), str.end(), str.begin(), ::toupper); // C++98/03
    // C++11 及以后使用 locale 来确保正确处理多字节字符集
    // std::transform(str.begin(), str.end(), str.begin(), 
    //                 [&](char c){return std::toupper(c, loc);});

    // 转换为全小写
    std::transform(str.begin(), str.end(), str.begin(), ::tolower); // C++98/03
    // C++11 及以后版本
    // std::transform(str.begin(), str.end(), str.begin(), 
    //                 [&](char c){return std::tolower(c, loc);});

    cout << "全大写: " << str << endl;

    // 新字符串用于小写输出
    string str_lower = str;
    std::transform(str_lower.begin(), str_lower.end(), str_lower.begin(), ::tolower);
    cout << "全小写: " << str_lower << endl;

    return 0;
}

请注意,直接操作ASCII码的方法只适用于ASCII字符集中的英文字母,而使用标准库函数和std::transform结合std::locale则可以支持更广泛的字符集,包括Unicode等。

4.可以使用toupper()函数将小写字母转换为大写字母,使用tolower()函数将大写字母转换为小写字母

这两个函数都是在<cctype>头文件中定义的。以下是一个示例代码:

#include <iostream>
#include <cctype>

int main() {
    char letter = 'a';  // 假设要转换的字母

    // 将小写字母转换为大写字母
    if (islower(letter)) {
        letter = toupper(letter);
        std::cout << "小写字母 " << letter << " 转换为大写字母后为: " << letter << std::endl;
    }

    // 将大写字母转换为小写字母
    if (isupper(letter)) {
        letter = tolower(letter);
        std::cout << "大写字母 " << letter << " 转换为小写字母后为: " << letter << std::endl;
    }

    return 0;
}

 

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值