乙巳🐍年

acc8226 的博客

char 是一种整数, 也是一种特殊的类型: 字符

  • 用单引号表示的是字符的字面量: ‘a’, ‘1’
  • ‘’ 也是一个字符
  • printf 和 scanf 里用%c来输入输出字符。

大小写转换

  • 字母在 ASCII 表中是顺序排列的。
  • 大写字母和小写字母是分开排列的,并不在一起。
  • ‘a’ - ‘A’ 可以得到两段之间的距离,于是,
    • a + 'a' - 'A' 可以把一个大写字母变成小写字母。
    • a + 'A' - 'a' 可以把一个小写字母变成大写字母。

C语言的字符串是以字符数组的形态存在的

  • 不能用运算符对字符串做运算
  • 通过数组的方式可以遍历字符串

字符串(其实还是一个字符数组, 但是以’\0’结尾)

image.png

  • 0 标志字符串的结束, 但它不是字符串的一部分
  • 字符串以数组的形式存在, 以数组或指针的形式访问.

用指针还是数组

  • char* str = “Hello”;
  • char str[] = “Hello”;

用数组: 当这个字符串在这里, 作为了本地变量控件会被自动回收
用指针: 当这个字符串不知道在哪里, 用于只读, 用于处理参数 和 动态分配空间
看上去明显用指针更通用。

总而言之如果要构造字符串用数组, 否则用指针。

#include<string.h>的一些方法

strlen 返回 s 的字符串长度(不包含结尾的 0)
int strcmp(const char *s1, const char * s2) 比较两个字符串, 返回:

int putchar(int c)
向标准输出写一个字符
返回写了几个字符, EOF(-1)表示写失败

getchar
从标准输入读入一个字符
返回类型是 int, 是为了返回 EOF(-1)

  • windows–> Ctrl + Z
  • Unix–> Ctrl + D
1
2
3
4
5
6
7
8
int main(int argc, char const *argv[]) {

int ch ;
while((ch = getchar()) != -1) {
putchar(ch);
}
return 0;
}

标准 ASCII 编码表

ASCII 码(十进制)控制字符 ASCII 码(十进制) 控制字符
0 NUT 32 (space)
1 SOH 33 !
2 STX 34 ”
3 ETX 35 #
4 EOT 36 $
5 ENQ 37 %
6 ACK 38 &
7 BEL 39 ’
8 BS 40 (
9 HT 41 )
10 LF 42 *
11 VT 43 +
12 FF 44 ,
13 CR 45 -
14 SO 46 .
15 SI 47 /
16 DLE 48 0
17 DCI 49 1
18 DC2 50 2
19 DC3 51 3
20 DC4 52 4
21 NAK 53 5
22 SYN 54 6
23 TB 55 7
24 CAN 56 8
25 EM 57 9
26 SUB 58 :
27 ESC 59 ;
28 FS 60 <
29 GS 61 =
30 RS 62 >
31 US 63 ?

64 @ 96 `
65 A 97 a
66 B 98 b
67 C 99 c
68 D 100 d
69 E 101 e
70 F 102 f
71 G 103 g
72 H 104 h
73 I 105 i
74 J 106 j
75 K 107 k
76 L 108 l
77 M 109 m
78 N 110 n
79 O 111 o
80 P 112 p
81 Q 113 q
82 R 114 r
83 S 115 s
84 T 116 t
85 U 117 u
86 V 118 v
87 W 119 w
88 X 120 x
89 Y 121 y
90 Z 122 z
91 [ 123 {
92 \ 124 |
93 ] 125 }
94 ^ 126 ~
95 _ 127 DEL

特殊控制字符说明
NUL 空
VT 垂直制表
SYN 空转同步
SOH 标题开始
FF 走纸控制
ETB 信息组传送结束
STX 正文开始
CR 回车
CAN 作废
ETX 正文结束
SO 移位输出
EM 纸尽
EOY 传输结束
SI 移位输入
SUB 换置
ENQ 询问字符
DLE 空格
ESC 换码
ACK 承认
DC1 设备控制 1
FS 文字分隔符
BEL 报警
DC2 设备控制 2
GS 组分隔符
BS 退一格
DC3 设备控制 3
RS 记录分隔符
HT 横向列表
DC4 设备控制 4
US 单元分隔符
LF 换行
NAK 否定
DEL 删除

字符串中存在 ASCLL 为 160 的空格,并且该空格不能通过 input.replaceAll("\\s+", " ");
以及 trim 的方法去除。

需要通过下面的代码可以去除 replaceAll("[\\u00A0]+", "")

应用场景

  • 函数返回的运算状态, 结果通过指针返回
  • 常用的套路是让函数返回特殊的不属于有效范围内的值来表示出错 -1 或者 0
  • 后续的语言(C++, Java)采用了异常机制来解决这个问题

指针是 const

  • 表示一旦得到某个变量的地址, 不能再指向其他变量 指针不可被修改, const 指针
1
2
3
int * const q = &i; // q 是const
*q = 26 // OK
q++; // ERROR

所指的是 const

  • 表示不能通过这个指针修改那个变量(并不能使得那个变量成为 const) 指针指向的东西不可修改
1
2
3
4
const int * q = &i; // q 是const
*q = 26 // ERROR (!p)是const
i = 26; // OK
q++; // OK

putchar

  • int puchar(int c);
  • 向标准输出写一个字符

题目内容:
给定一组二维坐标,表示直角坐标系内的一个多边形的连续的顶点的坐标序列。计算能包围这个多边形的平行于坐标轴的最小矩形,输出它的左下角和右上角的坐标。

输入格式:
第一行是一个正整数 n 表示顶点的数量,第二行是 n 组整数,依次表示每个顶点坐标的 x 和 y 值。

输出格式:
四个整数,依次表示所计算的矩形的左下角的坐标的 x、y 值和右上角坐标的 x、y 值。输出最后带有回车换行。

输入样例:
5
1 1 1 4 3 7 4 4 4 1

输出样例:
1 1 4 7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <stdio.h>

int main(int argc, char const *argv[]) {
int n;
scanf("%d\n", &n);

int xMin, yMin, xMax, yMax;
int x, y;
scanf("%d", &x);
scanf("%d", &y);
xMin = xMax = x;
yMin = yMax = y;

// int* arrayX = (int*)malloc(sizeof(int) * n);
int len = 2 * n;
for (int i = 2 * 1; i < len; i++) {
int input;
scanf("%d", &input);
if (i % 2 == 0) {
// odd
if (input < xMin) {
xMin = input;
}
if (input > xMax) {
xMax = input;
}
} else {
// even
if (input < yMin) {
yMin = input;
}
if (input > yMax) {
yMax = input;
}
}
}

printf("%d %d %d %d\n", xMin, yMin, xMax, yMax);
return 0;
}

题目内容:
本题要求编写程序,比较两个分数的大小。

输入格式:
输入在一行中按照“a1/b1 a2/b2”的格式给出两个分数形式的有理数,其中分子和分母全是int类型范围内的正整数。

输出格式:
在一行中按照 “a1/b1 关系符 a2/b2” 的格式输出两个有理数的关系。其中“>”表示“大于”,“<”表示“小于”,“=”表示“等于”。
注意在关系符前后各有一个空格。

输入样例:
1/2 3/4
输出样例:
1/2 < 3/4

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

int main(int argc, char const *argv[]) {
int a1, b1, a2, b2;
scanf ("%d/%d %d/%d", &a1, &b1, &a2, &b2);

char c;
if (a1 * b2 == b1 * a2) {
c = '=';
} else {
double result1 = 1.0 * a1 / b1;
double result2 = 1.0 * b2 / b2;

if (result1 < result2) {
c = '<';
} else {
c = '>';
}
}

printf("%d/%d %c %d/%d\n", a1, b1, c, a2, b2);
return 0;
}

注意等于的判断。

计算机程序: 用计算机语言编写的能完成一定功能的指令序列.
计算机语言: 计算机能识别的指令及其使用规则的集合

编写好的程序

能完成要求的功能
良好的性能
•可读性好,易于理解
•节省时间,节约空间
•可靠性高,易维护

如何学习程序设计

学习方法
◦ 语法熟
 认真听讲,仔细阅读教材,对语法点进行测试
◦ 练习多
 模仿例题,读别人的程序,做习题——多写程序
 要会,要熟
 学习关键
◦ 算法
◦ 调试
 学习技巧
◦ 问
◦ 问同学,问老师,问网络,试一试

阅读全文 »

计算机中的数据类型

◦ 不同的表示形式
◦ 不同的存储空间
◦ 不同的运算

整数

关于不同类型的数所占的字节数
 C++没有规定不同类型的数占的字节数
 会因计算机系统、编译器的不同而不同
 sizeof()运算符测试某类型数所占字节数

1
2
3
cout<<sizeof(int)<<endl;//整型数的字节数
cout<<sizeof(short int)<<endl;
cout<<sizeof(short)<<endl; ;//短整型的字节数
阅读全文 »
0%