C语言字符数组
字符数组
1. 字符数组的定义和初始化
1.1 定义字符数组
字符数组可以用来存储多个字符,它的定义方式类似于其他类型的数组:
1 | char array_name[size]; |
其中 size
是数组的大小,表示最多可以存储 size
个字符。
1.2 初始化字符数组
字符数组可以在定义时进行初始化:
1 | char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; |
也可以使用字符串字面量来初始化字符数组:
1 | char greeting[] = "Hello"; |
在这种情况下,编译器会自动计算数组的大小,并在最后添加一个空字符’\0
‘ 来表示字符串的结束。
2.字符数组的输入与输出
1 | char s[20]; |
该操作会以空格为结束输入。
scanf
遇到空格、制表符(\T)或换行符(\n)时会停止。
例如
输入hello world
s字符数组中只存了hello
即为了安全地读取包含空格的字符串,可以使用 fgets
:
前提调用string库函数。
1 | char s[20]; |
但是在使用 fgets
函数读取字符串时,通常需要注意处理换行符。换行符是输入的一部分,会被 fgets
存储在缓冲区中,这可能会对字符串处理产生影响。下面详细解释为什么需要处理换行符以及如何处理换行符。
2.1为什么需要处理换行符
- 字符串处理的需求:在许多情况下,我们希望输入的字符串不包含换行符。例如,用户输入的名字、密码等信息通常不应包含换行符。
- 一致性:许多字符串操作函数如
strlen
、strcmp
、strcat
等,都假设字符串不包含不必要的换行符。保留换行符可能会导致这些操作产生意外结果。 - 输出美观:直接输出包含换行符的字符串可能会导致输出格式混乱。
fgets
函数读取输入行时,包括换行符(如果缓冲区足够大),并将其作为字符串的一部分存储在缓冲区中,最后添加一个空字符 \0
来终止字符串。例如,如果用户输入了 “Hello, World!” 并按下回车键,fgets
将读取并存储 “Hello, World!\n”。
2.2如何处理换行符
方法一:手动移除换行符
可以在读取字符串后手动检查并移除换行符。这是最常见的方法:
1 |
|
在这段代码中,读取输入后,通过 strlen
函数获取字符串长度,然后检查最后一个字符是否是换行符。如果是,将其替换为字符串终止符 \0
。
输出用printf就行了。
3.字符数组函数
C 标准库提供了一些常用的字符串处理函数,定义在 <string.h>
头文件中。
3.1 strlen函数
计算字符串的长度,不包括结尾的空字符
\0
。
1 |
|
3.2 strcat函数
将源字符串连接到目标字符串的末尾。目标字符串必须足够大以容纳连接后的字符串和终止字符
\0
。
1 |
|
运行结果
Hello,World!
3.3 strcmp函数
比较两个字符串。如果相等返回 0,第一个字符串大于第二个返回正值,小于返回负值。
1 |
|
3.4转换字母大小写函数
在 C 语言中,可以使用以下函数来转换字母的大小写:
1. toupper
功能
将小写字母转换为大写字母。
原型
1 | int toupper(int c); |
示例
1 |
|
2. tolower
功能
将大写字母转换为小写字母。
原型
1 | int tolower(int c); |
示例
1 |
|
注意事项
- 这两个函数的参数和返回值都是整型,因为它们可以处理所有可能的字符值,而不仅仅是字母。
- 如果参数不是字母,则这两个函数返回原始字符值,不进行任何转换。
- 这些函数在
<ctype.h>
头文件中声明。
总结
使用 toupper
和 tolower
函数可以方便地转换字母的大小写,这在许多情况下都非常有用,比如标准化输入或输出,进行字符串比较等。在处理字符时,要确保使用这些函数来确保处理的一致性和正确性。
注:不推荐使用strupr和strlwr,
strlwr
和strupr
函数是某些编译器提供的非标准函数,它们分别用于将字符串转换为全小写和全大写。尽管它们在某些编译器上可用,但并不是所有的标准 C 库都提供这些函数。在一些编译器和环境中,使用这些函数可能会导致不可移植性问题,因为它们不是标准 C 函数,可能会因编译器和平台的不同而表现不同。另一方面,
toupper
和tolower
函数是标准 C 函数,它们提供了一种可移植且广泛支持的方法来转换单个字符的大小写。因此,在编写可移植的 C 代码时,通常推荐使用toupper
和tolower
函数来处理字符的大小写转换。虽然
strlwr
和strupr
函数在某些情况下可能很方便,但它们不属于 C 标准库的一部分,这意味着它们的行为可能会因编译器或平台的不同而有所不同。因此,在编写可移植的 C 代码时,最好避免使用这些非标准函数。
3.自定义转换大小写
1 |
|
测试输入:
A
。预期输出:
a
。测试输入:
b
。预期输出:
B
。