c++基础34转义字符和字符函数

转义字符和字符函数

转义字符

在C++中,转义字符是一种特殊的字符常量,由反斜杠(\)后跟一个或多个字符组成。转义字符用于表示那些不能直接表示的字符,或者用于表示一些特殊的控制字符。以下是一些常用的转义字符:

  1. 换行符 (\n):插入一个新行。
  2. 回车符 (\r):将光标移动到当前行的开头。
  3. 水平制表符 (\t):插入一个制表位(通常是8个空格)。
  4. 垂直制表符 (\v):插入一个垂直制表位。
  5. 退格符 (\b):向后删除一个字符。
  6. 响铃符 (\a):发出一个警告声。
  7. 空字符 (\0):空字符,占用一个字节。
  8. 转义字符 (\\):表示一个反斜杠字符。
  9. 单引号 (\'):表示一个单引号字符。
  10. 双引号 (\"):表示一个双引号字符。
  11. 问号 (\?):表示一个问号字符。
cpp 复制代码
#include <iostream>

int main() {
    std::cout << "He said, \"Hello, World!\"" << std::endl;
    return 0;
}

在这个例子中,\"是一个转义字符,它告诉编译器我们想要在字符串中包含一个双引号,而不是字符串的结束标记。

字符函数

C++ 提供了一系列的字符处理函数,这些函数定义在 <cctype> 头文件中。以下是一些常用的字符函数:

  1. isalnum© :检查字符 c 是否是字母或数字,如果是返回非零值,否则返回0。
  2. isalpha© :检查字符 c 是否是字母,如果是返回非零值,否则返回0。
  3. iscntrl© :检查字符 c 是否是控制字符,如果是返回非零值,否则返回0。
  4. isdigit© :检查字符 c 是否是数字(0-9),如果是返回非零值,否则返回0。
  5. isgraph© :检查字符 c 是否是可打印字符且不是空格,如果是返回非零值,否则返回0。
  6. islower© :检查字符 c 是否是小写字母,如果是返回非零值,否则返回0。
  7. isprint© :检查字符 c 是否是可打印字符,如果是返回非零值,否则返回0。
  8. ispunct© :检查字符 c 是否是标点符号,如果是返回非零值,否则返回0。
  9. isspace© :检查字符 c 是否是空白字符(如空格、制表符等),如果是返回非零值,否则返回0。
  10. isupper© :检查字符 c 是否是大写字母,如果是返回非零值,否则返回0。
  11. isxdigit© :检查字符 c 是否是十六进制数字(0-9, a-f, A-F),如果是返回非零值,否则返回0。

此外,还有一些函数可以将字符在大小写之间转换:

  1. tolower© :将字符 c 转换为小写,如果 c 不是大写字母或已经是小写,则返回 c
  2. toupper© :将字符 c 转换为大写,如果 c 不是小写字母或已经是大写,则返回 c

这些函数对于处理字符串和字符数据非常有用。在使用这些函数之前,需要包含 <cctype> 头文件。例如:

cpp 复制代码
#include <cctype>

bool isDigitOrLetter(char c) {
    return isalnum(static_cast<unsigned char>(c));
}

请注意,这些函数只适用于单字节字符。对于宽字符或 Unicode 字符,应使用 <cwctype> 头文件中的相应函数。

不用函数判断字符

cpp 复制代码
#include <iostream>
using namespace std;
int main() {
	char c;
	cin>>c;
	//c是否是数字 
    cout<<"是不是数字:"<<('0'<=c && c<='9')<<endl;
    //c是否是大写字母 
    cout<<"是否是大写字母:"<<('A'<=c && c<='Z')<<endl;
    //c是否是小写字母 
    cout<<"是否是小写字母:"<<('a'<=c && c<='z')<<endl;
    return 0;
}

T146010

第几个字母

  • 题目描述

输入一个大写字母,输出这个字母是从大写字母 A 开始的第几个字母。

譬如:如果输入的大写字母是 C,那么 C 是从 A 开始的第 2 个字母。如果输入的大写字母是 A,那么 A 是从 A 开始的第 0 个字母。

  • 输入格式

A ~ Z 之间的一个大写字母(包括 AZ)。

  • 输出格式

一个正整数,表示指定的字母是从大写字母 A 开始的第几个字母。

  • 样例输入

    A

  • 样例输出

    0

代码

  • 字符相减之后的结果,结果的数据类型变成了int。
cpp 复制代码
#include <iostream>
using namespace std;
int main() {
	char c;
	cin>>c;
	cout<<c-'A'<<endl;
    return 0;
}

T146012

后4位的字母

  • 题目描述

输入一个大写字母,输出这个字母在字母表中后 4 位对应的大写字母。比如输入字母 A,则需要输出字母 E。以下是具体的对应关系:

输入字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
对应字母 E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
  • 输入格式

A ~ Z 之间的一个大写字母(包括 AZ)。

  • 输出格式

对应的大写字母。

  • 样例输入

    A

  • 样例输出

    E

代码

cpp 复制代码
#include <iostream>
using namespace std;
int main() {
	char c;
	cin>>c;
	cout<<(char)((c-'A'+4)%26+'A')<<endl;
    return 0;
}

T146002

字符转换

  • 题目描述

输入一个大写字母,现在需要按照下表的对应关系,输出这个大写字母对应的字符。

输入字母 A B C D E F G H I J
对应字符 Y T w h K n H ! Z 7
  • 输入格式

范围在 A ~ J 之间的一个大写字母(包括 AJ)。

  • 输出格式

对应的字符。

  • 样例输入

    F

  • 样例输出

    n

代码

  • 使用map
cpp 复制代码
#include <iostream>
#include<map>
using namespace std;
int main() {
	char c;
	cin>>c;
	map<char,char> m={{'A','Y'},{'B','T'},{'C','w'},{'D','h'},{'E','K'},{'F','n'},{'G','H'},{'H','!'},{'I','Z'},{'J','7'}};
	cout<<m[c]<<endl;
    return 0;
}
  • 使用数组
cpp 复制代码
#include <iostream>
#include<map>
using namespace std;
int main() {
	char c;
	cin>>c;
	char a[]={'Y','T','w','h','K','n','H','!','Z','7'};
	cout<<a[c-'A'];
    return 0;
}

size_t和ptrdiff_t

size_t

  • size_t 是一个无符号整数类型,通常用于表示大小、长度或索引。
  • 它是 std::vector::size()std::string::length() 等函数的返回类型,用于返回容器中元素的数量。
  • size_t 也是 sizeof 运算符的结果类型,用于获取数据类型或对象在内存中所占的字节数。
  • 在C++标准库中,任何返回容器大小或数组长度的函数都使用 size_t 类型。
  • size_t 的大小至少为16位,但在大多数现代平台上,它通常是32位或64位,这取决于系统的架构。

ptrdiff_t

  • ptrdiff_t 是一个有符号整数类型,用于表示两个指针之间的差异。
  • 它是指针相减的结果类型,例如,当你使用指针算术计算两个元素之间的距离时。
  • ptrdiff_t 也是迭代器减法的结果类型,如 std::vector<int>::iterator 相减的结果。
  • ptrdiff_t 可以表示负值,这对于表示反向迭代器或负索引非常有用。
  • ptrdiff_t 的大小至少为16位,并且在相同的平台上,它与 size_t 具有相同的位宽。

使用场景

  • 当你需要处理容器或数组的大小、长度或正索引时,使用 size_t
  • 当你需要计算两个指针或迭代器之间的差异时,使用 ptrdiff_t

示例代码

  • 定义示例
cpp 复制代码
#include <iostream>
#include<cstdio>
using namespace std;
int main() {
	size_t a=1;
	ptrdiff_t b=-12;
	cout<<"a:"<<a<<",b:"<<b<<endl;
	scanf("%zu%td",&a,&b);
	printf("%zu %td\n",a,b);
    return 0;
}
  • 使用场景示例
cpp 复制代码
#include <vector>
#include <cstddef> // 包含 size_t 和 ptrdiff_t 的定义
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用 size_t 获取容器大小
    size_t size = vec.size(); // size 是无符号整数

    // 使用 ptrdiff_t 计算两个迭代器之间的差异
    std::vector<int>::iterator it1 = vec.begin();
    std::vector<int>::iterator it2 = vec.end();
    ptrdiff_t diff = it2 - it1; // diff 是有符号整数
    return 0;
}
相关推荐
叫我龙翔21 分钟前
【项目日记】仿mudou的高并发服务器 --- 整体框架搭建 ,实现时间轮模块
运维·服务器·网络·c++·github
z樾1 小时前
C++实现用户分组--学习
开发语言·c++·学习
木辛木辛子2 小时前
L2-2 十二进制字符串转换成十进制整数
c语言·开发语言·数据结构·c++·算法
誓约酱2 小时前
(动画版)排序算法 -希尔排序
数据结构·c++·算法·排序算法
无所谓จุ๊บ2 小时前
Android Studio使用c++编写
android·c++
avenue轩2 小时前
gdb调试redis。sudo
c++·redis
ahadee3 小时前
蓝桥杯每日真题 - 第7天
c++·vscode·算法·蓝桥杯
Jack黄从零学c++4 小时前
opencv(c++)----图像的读取以及显示
c++·人工智能·opencv
小志biubiu4 小时前
哈希表的实现--C++
开发语言·数据结构·c++·学习·算法·哈希算法·散列表