字符,字符串,字符数组(c语言)!

字符

字符的定义
字符是一个单个的字母、数字、标点符号或者其他可打印的符号,使用单引号 ’ ’ 表示,例如:‘A’、‘0’、‘+’ 等。

字符在计算机中的存储

计算机存储字符时存储的是字符的ASCII码,C 语言使用 ASCII 码表示字符,每个字符都有一个整数值和一个字符表示。
在这里插入图片描述
• 字符A~ Z的ASCII码值从65~90
• 字符a ~ z的ASCII码值从97~122
• 对应的大小写字符(a和A)的ASCII码值的差值是32
• 数字字符0 ~ 9的ASCII码值从48~57
• 换行 \n 的ASCII值是:10
• 在这些字符中ASCII码值从0~31 这32个字符是不可打印字符,⽆法打印在屏幕上观察
•'\0’的ASCII为0,常用做字符串的结束标志。

字符的使用

打印字符

在这里插入图片描述

与字符进行比较

进行比较的两个字符会隐式转换,即如果参与关系运算的两个数据类型都是字符型,则会将字符型数据转换成相应的ASCII码值,再进行计算。
在这里插入图片描述

字母的大小写转换

大写变小写
#include <stdio.h>
int main() {
    char ch;
    scanf("%c", &ch);
    if (ch > 'A' && ch < 'Z')
    {
        ch = ch + 32;
        }
    printf("%c\n", ch);
    return 0;
}

在这里插入图片描述

字符串

**字符串(字符串常量):表示一个或多个字符的序列。字符串使用双引号 " " 表示,例如:"hello"、"world"、"a"等。字符串的最后一个字符是 "\0",表示字符串的结尾。 在C语言中,字符串常量是由字符组成的字符数组,以空字符’\0’结尾。字符串常量可以用双引号括起来,例如:“Hello, World!”。在内存中,字符串常量会被存储为一个字符数组,每个字符占据一个字节的空间。字符串的最后一个字符是空字符’\0’,它表示字符串的结束。 字符串常量是不可修改的,也就是说,一旦定义了一个字符串常量,就不能直接修改它的内容。如果需要修改字符串的内容,可以将字符串常量复制到一个字符数组中,然后对字符数组进行修改。 orange
## 字符串的打印
printf("Hello World!");

字符串作为函数参数

在c语言中,字符串以存储字符数组的方式存储在内存中,当字符串作为函数参数时,实际上你是在传递指向字符数组首元素的指针。

void Check(char* str)
{
printf("%s",str);
}

在这里插入图片描述

字符数组

存储字符的数组
# 字符数组的特点
	char arr[6] = "hello";

在这里插入图片描述

字符数组以’\0’为结束标志,系统自动填充\0。

字符数组的初始化

在C语言中,字符数组通常用于存储字符串。初始化字符数组有多种方式,下面是一些常见的示例:

  1. 使用字符串字面量初始化
    c
    char str[] = “Hello, World!”;
    这种方法不仅简单,而且会自动在字符串的末尾添加一个空字符 ‘\0’,以便表示字符串的结束。

  2. 明确指定数组大小并使用字符串字面量初始化
    c
    char str[14] = “Hello, World!”;
    数组大小应至少为字符串长度加1,以容纳末尾的空字符 ‘\0’。在这个例子中,字符串 “Hello, World!” 的长度为13,所以数组大小为14。

  3. 逐个字符初始化
    c
    char str[6] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
    这种方法显式地提供每个字符,并确保在最后添加空字符 ‘\0’。

  4. 指定部分元素,其余元素自动初始化为0
    c
    char str[10] = “Hello”;
    在这个例子中,数组大小为10,但只初始化了前5个字符(包括末尾的空字符)。剩余的5个字符会自动初始化为0(即空字符)。

  5. 使用字符常量初始化
    c
    char str[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
    这与逐个字符初始化类似,但使用字符数组而不是字符串字面量。需要注意末尾的空字符 ‘\0’,否则它不会是一个有效的C字符串。

  6. 动态分配并初始化(高级用法)
    对于更复杂的场景,可能需要动态分配内存。这通常使用标准库函数 malloc 或 calloc,然后手动复制字符串内容。

c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
char *str = (char *)malloc(14 * sizeof(char)); // 分配内存
if (str != NULL) {
strcpy(str, “Hello, World!”); // 复制字符串
printf(“%s\n”, str);
free(str); // 释放内存
} else {
printf(“Memory allocation failed\n”);
}
return 0;
}
动态分配内存后,应检查 malloc 是否成功,并在使用完毕后释放内存以避免内存泄漏。

字符数组的使用

向字符数组中输入字符

1.scanf()可以获取用户输入的单个或多个字符串
scanf对于字符串输入的处理和对整数类似,会忽略数据项前面的空白字符(空格(space),制表符(tab),换行符(\n)),而且默认的分隔符(表示一个数据读取完毕)是所有的空白字符。
在这里插入图片描述

一空白作为分隔符,显然scanf函数不能读取带有空格的字符串(字符数组)。
2.fgets函数

原型:char * fgets ( char * str, int num, FILE * Stream );
功能: 从流中获取字符串
从流 中读取字符并将它们作为 C 字符串存储到str中,直到读取( num -1) 个字符或到达换行符或文件末尾(以先发生者为准)
参数:1.指向复制读取的字符串的char数组的指针。
2.要复制到str中的最大字符数。
3.指向标识输入流的FILE对象的指针。
在这里插入图片描述

注:1.使用fgets函数从键盘输入的字符在填充字符数组时,从数组的第一个元素开始填充的。
2.num -1个字符中包含一个换行符,换行符使fgets停止读取,但该函数将其视为有效字符并包含在复制到str 的字符串中。

复制到str 的 字符后会自动附加一个终止空字符。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值