06.字符串

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]+”, “”)