• C++
  • C++字符运算与条件表达式学习笔记

  • @ 2025-8-21 13:40:43

C++字符运算与条件表达式学习笔记

一、ASCII码表基础

在计算机中,字符是以ASCII码的形式存储的,掌握ASCII码的规律是进行字符运算的基础。

重要字符的ASCII码值

  • 小写字母'a'的ASCII码为97
  • 大写字母'A'的ASCII码为65
  • 数字字符'0'的ASCII码为48
  • 空格符' '的ASCII码为32
  • 换行符'\n'的ASCII码为10

ASCII码的规律

  1. 顺序编码特性:小写字符、大写字符以及数字字符都是顺序编码的
    • 例如:'B' = 'A' + 1 = 66'1' = '0' + 1 = 49'5' = '0' + 5 = 53
  2. 大小写转换规律:大写字符与小写字符之间的ASCII码差值固定为32

二、字符与整数运算

字符在参与运算时,会自动转换为其对应的ASCII码值(整数)进行计算,计算结果可以再转换回字符。

字符后移一位示例

题目:输入一个大写字符,输出它的后一个字符(保证输入不是'Z')

实现思路:利用字符顺序编码的特性,将字符加1即可得到后一个字符

#include <iostream>
using namespace std;

int main(){
    char a,b;
    cin>>a;
    b = a + 1;  // 赋值时会自动转换为字符类型
    cout<<b;
    return 0; 
}

注意:直接输出a+1会得到ASCII码值(整数),需要通过赋值或强制类型转换得到字符结果

三、大小写转换

利用大小写字符ASCII码差值为32的规律,可以实现大小写转换。

1. 大写转小写

题目:输入一个大写字符,转换为小写字符输出

#include <iostream>
using namespace std;

int main(){
    char a;
    cin>>a;
    cout<<char(a + 32);  // 强制类型转换,将计算结果转为字符
    return 0; 
}

2. 小写转大写

题目:输入一个小写字符,转换为大写字符输出

#include <iostream>
using namespace std;

int main(){
    char a;
    cin>>a;
    cout<<char(a - 32);  // 减去32得到大写字符的ASCII码
    return 0; 
}

四、字符加密解密示例(SOS案例)

题目:输入三个大写字母,将每个字母往前数三个(ASCII码减3)进行解密

实现思路:对每个字符的ASCII码值减3,得到解密后的字符

#include <iostream>
using namespace std;

int main(){
    char a,b,c;
    cin>>a>>b>>c;
    a = a - 3;  // 每个字符ASCII码减3
    b = b - 3;
    c = c - 3;
    cout<<a<<b<<c;
    return 0; 
}

示例:输入"VRV",输出"SOS"

  • 'V' - 3 = 'S'(86 - 3 = 83)
  • 'R' - 3 = 'O'(82 - 3 = 79)
  • 'V' - 3 = 'S'(86 - 3 = 83)

五、条件表达式

条件表达式用于判断条件,返回值为1(真,true)或0(假,false)。

关系运算符

C++提供了六种关系运算符:

  1. 大于(>)、小于(<
  2. 大于等于(>=)、小于等于(<=
  3. 等于(==)、不等于(!=

示例

  • a > 0:判断a是否大于0
  • a + 10 <= b:判断a+10是否小于等于b
  • a == b:判断a和b是否相等(注意是两个等号)

六、实战案例:电子表格式化输出

题目:给出一个时间(单位:秒),按电子表格式xx:xx:xx输出(不超过24小时)

解题步骤

  1. 计算小时数:总秒数 ÷ 3600(60秒×60分钟)
  2. 计算分钟数:(总秒数 ÷ 60) % 60
  3. 计算秒数:总秒数 % 60
  4. 格式化输出:确保每个部分都是两位数字,不足两位用0填充

代码实现

#include<iostream>
#include<iomanip>  // 包含格式控制函数
using namespace std;

int main() {
    int n;            // 存储输入的总秒数
    cin >> n;
    
    int h = n / 60 / 60;  // 计算小时
    int m = n / 60 % 60;  // 计算分钟
    int s = n % 60;       // 计算秒
    
    // setw(2)设置宽度为2,setfill('0')设置填充字符为0
    cout << setw(2) << setfill('0') << h 
         << ":" << setw(2) << setfill('0') << m 
         << ":" << setw(2) << setfill('0') << s;
    
    return 0;
}

示例:输入3701秒

  • 小时:3701 ÷ 3600 = 1
  • 分钟:(3701 ÷ 60) % 60 = 61 % 60 = 1
  • 秒:3701 % 60 = 41
  • 输出:01:01:41

七、知识要点总结

  1. 字符变量的本质:字符变量本质上存储的是该字符对应的ASCII码值(整数)
  2. 隐式转换与强制转换
    • 隐式转换:字符参与运算时自动转换为整数
    • 强制转换:使用char()将整数转换为对应的字符
  3. 大小写转换方法
    • 大写转小写:字符 + 32
    • 小写转大写:字符 - 32
  4. 格式控制:使用<iomanip>头文件中的setw()setfill()可以控制输出格式
  5. 条件表达式:使用关系运算符构建判断条件,返回布尔值(真或假)

0 条评论

目前还没有评论...