小白洛谷刷题总结1(头文件,main(),ASCII编码)

发布于:2022-12-21 ⋅ 阅读:(491) ⋅ 点赞:(0)

目录

一、从“头”说起

二、关于main( )

三 、关于ASCII码的应用

前言

本系列是我在初步学习C++并在洛谷上刷入门题单过程中提炼总结归纳的一些经验,希望在帮助自己巩固和深入理解知识的同时,帮助各位初学者们顺利入门!


一、从“头”说起

头文件是什么:

在 C 语言家族程序中,头文件被大量使用。一般而言,每个 C++/C 程序通常由头文件和定义文件组成。头文件作为一种包含功能函数、数据接口声明的载体文件,主要用于保存程序的声明,而定义文件用于保存程序的实现。

简单来说,在代码中如果要调用这个头文件中的函数或者宏定义,则需要在开头引用该头文件。

C++ 头文件

这里需要明白一下 C 和 C++ 的头文件之间的关系:

C语言的头文件一般 #iinclude<xx.h> 的形式出现,如

#include<stdio.h> 
#include<string.h> 
#include<stdlib.h> 

 #include<stdio.h>  是关于最基础的输入输出

 #include<string.h>  关于字符串的处理

 #include<stdlib.h> 即 standard library 标准库头文件包含了 C 语言的一些常用库函数。如
动态内存相关的 malloc, realloc, zalloc, calloc, free 等。
随机数相关的 rand,srand 等。
系统相关的 system, getenv, setenv 等。
字符串转数值函数 atoi, atof, strtoul 等。 

C++ 头文件不仅包含了 C 的头文件,可以直接调用或者通过把 #include<xx.h> 改为 #include<cxx> 如 #include<cstdio>   来使用C的头文件

但是C++也有他独特的头文件格式和风格:

#include<iostream>
#include<string>
#include<algorithm>
#include<iomanip>

请读者自行查询其作用。

 另外值得一提的还有两个点

1.C++使用者一般会使用语句: using namespace std; 节省代码量提高效率

参考知识点:命名空间

2.万能头文件:

#include<bits/stdc++.h>

这个头文件中包含了大量其他头文件,可以满足绝大部分需求,使用会增加编译时间,但不会增加运行时间。 有这个一劳永逸的好东西,再也不用去记各种头文件名啦!

ps:VS不能直接用这个万能头,需要自行配置,CSDN上有相关教程,请大家自行查阅。

二、关于main( )

我曾在慕课网上学习C++的语法课程,其中一门教程中使用的main()函数都带有形参,而我在其他地方又很少看到这样使用的,于是在csdn上搜索了关于main和main( int argc,char *argv[ ])的区别

        main() 函数的参数
  前面介绍的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个, 习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为: 

int main (argc,argv);
int argv;
char *argv[];

或写成:

int main (int argc,char *argv[ ])


  由于main函数不能被其它函数调用, 因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。
 

三 、关于ASCII码的应用

我在洛谷上刷入门题的时候,卡住或者AC后看大佬们的题解,偶尔会看见一些使用ASSCI码来解题的妙解(甚至是用的最多的解法),而对ASSCI码的不熟悉让我没有这条思路。接下来就来总结一下ASCII码的规则怎么应用

先上ASCII表:

ASCII 编码一览表
二进制 十进制 十六进制 字符/缩写 解释
00000000 0 00 NUL (NULL) 空字符
00000001 1 01 SOH (Start Of Headling) 标题开始
00000010 2 02 STX (Start Of Text) 正文开始
00000011 3 03 ETX (End Of Text) 正文结束
00000100 4 04 EOT (End Of Transmission) 传输结束
00000101 5 05 ENQ (Enquiry) 请求
00000110 6 06 ACK (Acknowledge) 回应/响应/收到通知
00000111 7 07 BEL (Bell) 响铃
00001000 8 08 BS (Backspace) 退格
00001001 9 09 HT (Horizontal Tab) 水平制表符
00001010 10 0A LF/NL(Line Feed/New Line) 换行键
00001011 11 0B VT (Vertical Tab) 垂直制表符
00001100 12 0C FF/NP (Form Feed/New Page) 换页键
00001101 13 0D CR (Carriage Return) 回车键
00001110 14 0E SO (Shift Out) 不用切换
00001111 15 0F SI (Shift In) 启用切换
00010000 16 10 DLE (Data Link Escape) 数据链路转义
00010001 17 11 DC1/XON
(Device Control 1/Transmission On)
设备控制1/传输开始
00010010 18 12 DC2 (Device Control 2) 设备控制2
00010011 19 13 DC3/XOFF
(Device Control 3/Transmission Off)
设备控制3/传输中断
00010100 20 14 DC4 (Device Control 4) 设备控制4
00010101 21 15 NAK (Negative Acknowledge) 无响应/非正常响应/拒绝接收
00010110 22 16 SYN (Synchronous Idle) 同步空闲
00010111 23 17 ETB (End of Transmission Block) 传输块结束/块传输终止
00011000 24 18 CAN (Cancel) 取消
00011001 25 19 EM (End of Medium) 已到介质末端/介质存储已满/介质中断
00011010 26 1A SUB (Substitute) 替补/替换
00011011 27 1B ESC (Escape) 逃离/取消
00011100 28 1C FS (File Separator) 文件分割符
00011101 29 1D GS (Group Separator) 组分隔符/分组符
00011110 30 1E RS (Record Separator) 记录分离符
00011111 31 1F US (Unit Separator) 单元分隔符
00100000 32 20 (Space) 空格
00100001 33 21 !
00100010 34 22 "
00100011 35 23 #
00100100 36 24 $
00100101 37 25 %
00100110 38 26 &
00100111 39 27 '
00101000 40 28 (
00101001 41 29 )
00101010 42 2A *
00101011 43 2B +
00101100 44 2C ,
00101101 45 2D -
00101110 46 2E .
00101111 47 2F /
00110000 48 30 0
00110001 49 31 1
00110010 50 32 2
00110011 51 33 3
00110100 52 34 4
00110101 53 35 5
00110110 54 36 6
00110111 55 37 7
00111000 56 38 8
00111001 57 39 9
00111010 58 3A :
00111011 59 3B ;
00111100 60 3C <
00111101 61 3D =
00111110 62 3E >
00111111 63 3F ?
01000000 64 40 @
01000001 65 41 A
01000010 66 42 B
01000011 67 43 C
01000100 68 44 D
01000101 69 45 E
01000110 70 46 F
01000111 71 47 G
01001000 72 48 H
01001001 73 49 I
01001010 74 4A J
01001011 75 4B K
01001100 76 4C L
01001101 77 4D M
01001110 78 4E N
01001111 79 4F O
01010000 80 50 P
01010001 81 51 Q
01010010 82 52 R
01010011 83 53 S
01010100 84 54 T
01010101 85 55 U
01010110 86 56 V
01010111 87 57 W
01011000 88 58 X
01011001 89 59 Y
01011010 90 5A Z
01011011 91 5B [
01011100 92 5C \
01011101 93 5D ]
01011110 94 5E ^
01011111 95 5F _
01100000 96 60 `
01100001 97 61 a
01100010 98 62 b
01100011 99 63 c
01100100 100 64 d
01100101 101 65 e
01100110 102 66 f
01100111 103 67 g
01101000 104 68 h
01101001 105 69 i
01101010 106 6A j
01101011 107 6B k
01101100 108 6C l
01101101 109 6D m
01101110 110 6E n
01101111 111 6F o
01110000 112 70 p
01110001 113 71 q
01110010 114 72 r
01110011 115 73 s
01110100 116 74 t
01110101 117 75 u
01110110 118 76 v
01110111 119 77 w
01111000 120 78 x
01111001 121 79 y
01111010 122 7A z
01111011 123 7B {
01111100 124 7C |
01111101 125 7D }
01111110 126 7E ~
01111111 127 7F DEL (Delete) 删除

附上图片格式ASCII表,转发于洛谷P5704题解@郭轩铭

1.大小写字母转换

printf("%c",char(int(ch)-32));
//小写改大写
printf("%c",char(int(ch)+32));
//大写改小写

2.字符和数字的相互转换

int a2="2";
a1=(a2-'0');
//a1=2

以上操作把字符转换为了数字,同理可以逆向 -‘0’ 把数字转换为字符

本文含有隐藏内容,请 开通VIP 后查看