C++系列-第1章顺序结构-9-字符类型char

简介: C++系列-第1章顺序结构-9-字符类型char

在线练习:

http://noi.openjudge.cn/

https://www.luogu.com.cn/

总结

本文是C++系列博客,主要讲述字符类型char

字符类型char

在C++编程语言中,char是一种基本的数据类型,它用于存储单个字符。字符可以是字母、数字、标点符号或者是转义字符等。char类型通常占用一个字节(byte)的内存空间。

一个字节表示八位二进制数,8位无符号的二进制数可以表示为00000000-11111111,即0-255。

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

二进制转十进制:要从右到左用二进制的每个数去乘以2的相应次方

二进制的11111111=127+1*26+125+……1*20=128+64+32+16+8+4+2+1=255

所以一个字节表示无符号整数可以表示十进制的0-255共256个数,最大值为255。

基础知识

  1. 声明:声明一个char类型的变量,你可以这样做:
char myChar = 'A';
  1. 在这里,myChar是一个char类型的变量,并且它被赋予了字符A
  2. 字符表示:字符值需要用单引号(’ ')包围,比如'a''1''#'
  3. ASCII值:每个char类型的字符都对应一个ASCII码值。例如,字符'A'的ASCII码值是65。

案例:字符转换

下面是一个简单的案例,它演示了如何将小写字母转换为大写字母。这个程序会提示用户输入一个小写字母,然后程序将其转换为大写字母并显示结果。

#include <iostream>
using namespace std;
int main() {
    char lowercase, uppercase;
    cout << "请输入一个小写字母: ";
    cin >> lowercase;
    // 将小写字母转换为ASCII码值,然后减去32得到大写字母的ASCII码值
    uppercase = lowercase - 32;
    cout << "大写字母是: " << uppercase << endl;
    return 0;
}

输出为:

练习案例:字符判断

现在,你可以尝试一个练习案例。编写一个程序,让用户输入一个字符,然后判断它是大写字母、小写字母还是数字。

提示:

  • 大写字母的ASCII码范围是65到90。
  • 小写字母的ASCII码范围是97到122。
  • 数字字符的ASCII码范围是48到57。
    你可以在下面的代码框架中填充代码:
#include <iostream>
using namespace std;
int main() {
    char inputChar;
    cout << "请输入一个字符: ";
    cin >> inputChar;
    // 判断输入的字符类型
    if ((inputChar >= 'A') && (inputChar <= 'Z')) {
        cout << "你输入的是一个大写字母。" << endl;
    } else if ((inputChar >= 'a') && (inputChar <= 'z')) {
        cout << "你输入的是一个小写字母。" << endl;
    } else if ((inputChar >= '0') && (inputChar <= '9')) {
        cout << "你输入的是一个数字。" << endl;
    } else {
        cout << "你输入的字符不是字母也不是数字。" << endl;
    }
    return 0;
}

输出为:

案例 输出字符的ASCII值

#include <iostream>
using namespace std;
int main() {
    char myChar = 'A'; // 声明一个char类型的变量并初始化为'A'
    // 打印字符
    cout << "字符: " << myChar << endl;
    // 打印字符的ASCII码值
    cout << "ASCII码值: " << int(myChar) << endl;
    return 0;
}

输出为:

案例加密和解密简化版

下面是一个基本的例子,它演示了如何对单个字符进行加密和解密:

#include <iostream>
using namespace std;
int main() {
    char plainChar;
    int shift;
    cout << "请输入一个要加密的字符: ";
    cin >> plainChar; // 输入一个字符
    cout << "请输入加密的偏移量 (1-25): ";
    cin >> shift;
    // 加密字符
    char encryptedChar = plainChar + shift;
    cout << "加密后的字符: " << encryptedChar << endl;
    // 解密字符
    char decryptedChar = encryptedChar - shift;
    cout << "解密后的字符: " << decryptedChar << endl;
    return 0;
}

输出为:

在这个程序中,我们首先提示用户输入一个要加密的字符和一个整数偏移量(范围是1-25)。然后,我们通过将字符的ASCII码值加上偏移量来得到加密后的字符,并打印出来。接着,我们通过从加密后的字符的ASCII码值中减去相同的偏移量来得到解密后的字符,并打印出来。

请注意,这个程序只能处理一个字符,并且没有考虑加密过程中可能出现的边界情况,例如字符是大写字母、小写字母还是其他特殊字符。在实际应用中,加密通常会使用更复杂的算法和安全的密钥。

案例 加密和解密函数

下面是一个基于char和ASCII的简单加密案例。这个程序会将用户输入的文本进行加密,然后将加密后的文本输出。加密过程将使用一个简单的算法,例如对每个字符的ASCII码值进行加法操作。

#include <iostream>
#include <string>
using namespace std;
string encrypt(string text, int shift) {
    string encryptedText = "";
    for (int i = 0; i < text.length(); i++) {
        // 对每个字符的ASCII码值进行加法操作
        char encryptedChar = text[i] + shift;
        // 将加密后的字符添加到加密文本中
        encryptedText += encryptedChar;
    }
    return encryptedText;
}
string decrypt(string encryptedText, int shift) {
    string decryptedText = "";
    for (int i = 0; i < encryptedText.length(); i++) {
        // 对每个字符的ASCII码值进行减法操作以解密
        char decryptedChar = encryptedText[i] - shift;
        // 将解密后的字符添加到解密文本中
        decryptedText += decryptedChar;
    }
    return decryptedText;
}
int main() {
    string text;
    int shift;
    cout << "请输入要加密的文本: ";
    getline(cin, text); // 使用getline来允许输入空格
    cout << "请输入加密的偏移量: ";
    cin >> shift;
    string encryptedText = encrypt(text, shift);
    cout << "加密后的文本: " << encryptedText << endl;
    string decryptedText = decrypt(encryptedText, shift);
    cout << "解密后的文本: " << decryptedText << endl;
    return 0;
}

输出为:

在这个程序中,我们定义了两个函数encryptdecrypt来分别处理加密和解密操作。加密函数通过将每个字符的ASCII码值加上一个偏移量来实现加密,而解密函数则通过从加密后的ASCII码值中减去相同的偏移量来实现解密。

main函数中,我们首先提示用户输入要加密的文本和一个整数偏移量。然后,我们调用encrypt函数来加密文本,并打印出加密后的结果。接着,我们调用decrypt函数来解密文本,并打印出解密后的结果。

请注意,这个加密算法非常简单,并不适合真正的安全加密需求。在实际应用中,加密通常会使用更复杂的算法和安全的密钥。

相关文章
|
20天前
|
C语言 C++
C/C++ 自定义头文件,及头文件结构详解
还是从"stdio.h"说起,这是C语言中内置的标准库,也就是说,头文件很多时候其实就是一个“库”,类似于代码的仓库,也就是说将某些具有特定功能的常量、宏、函数等归为一个大类,然后放进这个“仓库”,就像stdio.h就是一个标准输入/输出的头文件
28 1
|
29天前
|
C++
C++ 数学函数、头文件及布尔类型详解
C++ 支持数学操作,如`max`和`min`函数找最大值和最小值,以及`&lt;cmath&gt;`库中的`sqrt`、`round`等数学函数。`bool`类型用于布尔逻辑,取值`true`(1)或`false`(0)。布尔表达式结合比较运算符常用于条件判断,例如在`if`语句中检查年龄是否达到投票年龄。在代码示例中,`isCodingFun`和`isFishTasty`变量分别输出1和0。
121 1
|
2月前
|
安全 程序员 编译器
【C/C++ 泛型编程 进阶篇 Type traits 】C++类型特征探究:编译时类型判断的艺术
【C/C++ 泛型编程 进阶篇 Type traits 】C++类型特征探究:编译时类型判断的艺术
176 1
|
2月前
|
算法 程序员 C++
【C/C++ 泛型编程 应用篇】C++ 对多参数的参数包的 参数类型提取 应用
【C/C++ 泛型编程 应用篇】C++ 对多参数的参数包的 参数类型提取 应用
44 5
|
7天前
|
存储 搜索推荐 C++
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
【C++高阶(二)】熟悉STL中的map和set --了解KV模型和pair结构
|
7天前
|
C++
【C++】std::string 转换成非const类型 char* 的三种方法记录
【C++】std::string 转换成非const类型 char* 的三种方法记录
5 0
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
18天前
|
存储 编译器 Linux
【C++初阶(十)】C++模板(进阶) ---非类型模板参数、模板的特化以及模板的分离编译
【C++初阶(十)】C++模板(进阶) ---非类型模板参数、模板的特化以及模板的分离编译
21 0
|
22天前
|
程序员 C语言 C++
C++流程结构
C++流程结构
|
2月前
|
C++ 容器
【C++】标准库类型string
【C++】标准库类型string
163 3