文章目录
1. 字符串输入与输出
1.1 字符串的输入函数(gets)
char * gets(char *s)
- 字符串的最后个字符是
\0
,要注意数据长度 gets
函数不会让空格成为字符串的结束标志,而scanf
会,scanf
需要%c
配合才能正常输入char s[5]; \\只能存四个字符,因为最后个字符是 \0 gets(s) pritnf("%s\n", s);
1.2 字符串的输出函数(puts)
puts(string);
puts()
和printf()
不一样的是puts()
会自动换行不需要\n
2. 字符数组
- 用法:
char c[10], ch[3][4];
- 字符数组的初始化:首先我们需要知道
{'a', 'b', 'c', '\0'}=="abc"
- 逐个字符赋值:
char ch[5]={ 'h', 'e', 'l', 'l', 'o';} //完整赋值 char ch[5]={ 'b', 'o', 'y'}; //部分赋值,那ch[3], ch[4]都是\0,NULL
字符串 b o y \0 \0 ASCII 98 111 121 0 0 - 用字符串常量:
//三种方法都可以 char ch[]="HELLO"; char ch[6]="HELLO"; char ch[6]={ "HELLO"};
- 注意:在打印字符数组的时候我们可以将其当做字符串来打印,但是我们需要注意的是这个字符数组的最后一位得是
\0
。否则,会随着地址一直往下打印直到找到\0
3. 字符串数组
- C语言中无字符串变量,而是用字符数组并以
\0
结尾当做字符串。 - 举个例子:在内存中占6个字节,字符串长度5
字符串 | h | e | l | l | o | \0 |
---|---|---|---|---|---|---|
ASCII | 104 | 101 | 108 | 108 | 111 | 0 |
- 举个二维数组的例子
char fruit[][7]={ "apple", "orange", "grape"};
水果 | 0 | 1 | 1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|---|---|---|
fruit[0] | a | p | p | l | e | \0 | \0 | \0 |
fruit[1] | o | r | a | n | g | e | \0 | \0 |
fruit[2] | g | r | a | p | e | \0 | \0 | \0 |
- 例子:输入一个字符串,然后逆序输出
#include <string.h> ... char arr[20]; int i, n; printf("Please input a string: "); gets(arr); n= strlen(arr) for (i=n; i>=0; i--) putchar(arr[i]); putchar('\n');
4. 常用字符串函数
- 首先我们要先引入
# include <string.h>
4.1 求字符串长度(strlen)
- 用法:
strlen(字符数组)
,我们可以通过man strlen
查询细节 - 求字符串长度,且
\0
不包括在内。 \xhh
:表示十六进制数代表的符号,举个例子在字符串中char s[]="\x69\141"
→ \rightarrow →ia
\ddd
:表示8进制- 练习:对于以下字符串,
strlen(s)
的值为:char s[10] = { 'A', '\0', 'B', 'C', '\0', 'D'<