0%

C 语言知识

字符串

字符串的存储

除了要存储双引号中的字符之外,C 规定还要多存储一个字符 “\0” 作为字符串的结束标志

例:存储一个值为 “learn” 的字符串

这个字符串的长度是 5

但是他需要 6 个字节来存储,因为要在这个字符串的结尾多存储一个结束表示 “\0”

字符型数据

字符用单引号<’’>表示
字符串用双引号<””>表示

转义字符

以转义符(反斜杠<\>) 开头的特定字符叫做转义字符

常见的转义字符有:

转义字符 含义
\n 换行
\r 回车
\b 退格
\t 跳格
\ 字符<\>
\’ 字符<’>
\” 字符<”>
\ddd 1 ~ 3 位 8 进制表示的字符(ASCII 码??)
\xhh 1 ~ 2 位 16 进制表示的字符

换行和回车的区别

换行:换到下一行

回车:回到开头

跳格:跳一个制表位(一般在计算机软件中一个制表位是 4 个字符,但在 C 语言中一个制表位是 8 个字符!)

1
2
3
void main(void){
printf("%s","\\")
}

输出结果:\

输入 & 输出

scanf() 和 printf() 函数

int scanf(const char *format, …) 函数从标准输入流 stdin 读取输入,并根据提供的 format 来浏览输入

int printf(const char *format, …) 函数把输出写入到标准输出流 stdout , 并根据提供的格式产生输出

format 可以是一个简单的常量字符串,但是您可以分别指定 %s、%d、%c、%f 等转换符来输出或读取字符串、整数、字符或浮点数。还有许多其他可用的格式选项,可以根据需要使用。如需了解完整的细节,可以查看这些函数的参考手册

转换符 说明
%c 单个字符
%s 字符串
%u 无符号十进制整数
%d 有符号十进制整数(正数不输出符号)
%i 有符号十进制整数(与 %d 相同)
%o 八进制形式无符号整数(不输出前缀 0)
%x(%X) 十六进制形式无符号整数(不输出前缀 Ox)
%a(%A) 十六进制形式浮点数 (C99 新增)
%f 以小数形式输出单、双精度实数
%e(%E) 以指数形式输出单、双精度实数
%g(%G) 以%f 或%e 中较短的输出宽度输出单、双精度实数
%lu 32 位无符号整数
%llu 64 位无符号整数
%p 指针地址
%% “%”

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 输入
// %d 格式化输入整数
int testInteger;
scanf("%d", &testInteger)

// %f 格式化输入浮点型数据
float f;
printf("Enter a number: ");
// %f 匹配浮点型数据
scanf("%f", &f);
printf("Value = %f", f);
// 结果:Value = <你输入的数>

// 输出
// %d 格式化输出整数
int testInteger = 5;
printf("Number = %d", testInteger);
// 结果:Number = 5

// %f 格式化输出浮点型数据
float f = 12.323;
printf("Value = %f", f);
// 结果:Value = 12.323000

getchar() & putchar() 函数

int getchar(void) 函数从屏幕读取下一个可用的字符,并把它返回为一个整数。这个函数在同一个时间内只会读取一个单一的字符。您可以在循环内使用这个方法,以便从屏幕上读取多个字符

int putchar(int c) 函数把字符输出到屏幕上,并返回相同的字符。这个函数在同一个时间内只会输出一个单一的字符。您可以在循环内使用这个方法,以便在屏幕上输出多个字符

示例:

1
2
3
4
5
6
int c;

printf("请输入");
c = getchar();

putchar(c);

gets() & puts() 函数

char *gets(char *s) 函数从 stdin 读取一行到 s 所指向的缓冲区,直到一个终止符或 EOF

int puts(const char *s) 函数把字符串 s 和一个尾随的换行符写入到 stdout

示例:

1
2
3
4
5
6
char str[100];

printf("请输入");
gets(str);

puts(str);

strcmp() 函数

比较两个字符串,即对两个字符串从左向右逐个字符按 ASCII 码值相比较,直到出现不同字符或者遇到结束符 “\0” 为止

参数 1 = 参数 2 函数值为 0

参数 1 > 参数 2 函数值为 1

参数 1 < 参数 2 函数值为 -1

例:

1
2
3
4
5
6
7
8
9
10
11
12
void main(){
if(strcmp("ABC","ABD") > 0) ...
}

/*
参数 1 的 A 和参数 2 的 A 对比,结果为 0
继续
参数 1 的 B 和参数 2 的 B 对比,结果为 0
继续
参数 1 的 C 和参数 2 的 D 对比,结果为 -1
结束
*/

strcat() 函数

C 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
void main(){
char str1[50],str2[50];

printf("请输入");
gets(str1);

printf("请输入");
gets(str2);

strcat(str1,str2);

puts(str1);
}

strlen() 函数

获取字符串的实际长度,不包含结束符 “\0”

1
2
3
4
5
6
7
void main(){
char[80] str = "hello";

printf("%d",strlen(str));

// 输出结果为 5
}

strupr() & strlwr() 大小写转换

1
2
3
4
5
6
7
8
9
void main(){
printf("%s\n",strupr("china"));

printf("%s\n",strlwr("CHINA"));

// 输出结果为:
// CHINA
// china
}

欢迎关注我的其它发布渠道