【C语言】(3)字符

字符串

1. 字符串简介

在C语言中,字符串是由字符数组构成的序列,以空字符('\0')结尾。这个空字符不可见,用于标记字符串的结束。C语言中没有专门的字符串类型,通常使用字符数组表示字符串。

2. 声明和初始化字符串

字符串可以通过几种方式在C语言中声明和初始化。

字符数组初始化

char str1[] = "Hello"; // 自动添加'\0'
char str2[6] = {
    
    'H', 'e', 'l', 'l', 'o', '\0'}; // 显式添加'\0'

使用指针

const char* str3 = "Hello"; // 指向字符串字面值

注意:使用指针指向字符串时,该字符串通常存储在程序的只读数据段中,不应被修改。

3. 字符串操作

C语言标准库 <string.h> 提供了多种操作字符串的函数。

字符串长度 - strlen()

#include <string.h>
size_t len = strlen(str1); // 计算字符串长度,不包含'\0'

字符串复制 - strcpy()strncpy()

char str4[10];
strcpy(str4, str1); // 复制字符串
strncpy(str4, str1, sizeof(str4)); // 复制指定长度的字符串

字符串连接 - strcat()strncat()

char str5[20] = "Hello, ";
strcat(str5, "World!"); // 在str5的末尾追加另一个字符串
strncat(str5, "Welcome!", 3); // 连接部分字符串

字符串比较 - strcmp()strncmp()

int cmp = strcmp(str1, "Hello"); // 比较两个字符串
int ncmp = strncmp(str1, "Hel", 3); // 比较两个字符串的前n个字符

字符串搜索 - strchr()strstr()

char* pch = strchr(str1, 'e'); // 查找字符在字符串中的首次出现
char* pstr = strstr(str1, "lo"); // 查找子字符串在字符串中的首次出现

4. 字符串的安全性

  • 在使用 strcpystrcat 等函数时,要确保目标数组足够大,以避免溢出。
  • 可使用 strncpystrncat 作为更安全的替代。
  • 永远不要尝试修改字符串字面值,这可能导致未定义行为。

5. 示例程序

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

int main() {
    
    
    char greeting[20] = "Hello, ";
    const char* name = "C Programmer";
    
    strcat(greeting, name); // 连接字符串
    printf("Greeting: %s\n", greeting); // 输出结果

    printf("Length: %lu\n", strlen(greeting)); // 输出字符串长度

    return 0;
}

ASCII码

ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是最基本的字符编码标准,用于文字和控制字符的编码。它最初是基于英语字母的编码标准,但后来逐渐成为国际标准。
在这里插入图片描述

ASCII码的组成

ASCII字符集包括以下几个部分:

  1. 控制字符:这些字符没有对应的可打印字符,用于控制像打印机等设备的行为。例如,换行(\n)、回车(\r)、制表符(\t)等。

  2. 可打印字符:包括英文字母(大写和小写)、数字(0-9)、标点符号以及其他一些特殊符号。

ASCII码的范围

ASCII定义了128个字符的编码,从0到127。每个字符占用一个字节(但实际上只使用了字节的低7位)。它可以分为以下两个主要部分:

  1. 标准ASCII码:0到127。包括常用的英文字母、数字、标点符号和一些控制字符。
  2. 扩展ASCII码:128到255。这部分不是标准ASCII的一部分,不同的系统和程序可能会有不同的实现。

ASCII码的应用

ASCII编码广泛应用于计算机和通信设备中。例如,键盘上每个按键的敲击都对应一个ASCII码。计算机内部,文本文件通常都是以ASCII码的形式存储字符。

示例

下面是一些常见ASCII字符及其对应的十进制、十六进制和二进制编码:

字符 十进制 十六进制 二进制
A 65 41 0100 0001
B 66 42 0100 0010
a 97 61 0110 0001
0 48 30 0011 0000
$ 36 24 0010 0100
\n 10 0A 0000 1010

ASCII码和编程

在C语言和其他许多编程语言中,字符常量实际上是它们对应的ASCII码。例如,'A'实际上是整数65。

注意

  • ASCII码是字符编码的基础,对理解和使用计算机中的文本数据非常重要。
  • 许多现代编码系统(如UTF-8)都是以ASCII为基础扩展而来的。

转义字符

转义字符就是基于ASCII码设计出来的,用于表示无法直接显示的字符或具有特殊含义的字符。它们以反斜杠\开头,后跟一个或多个字符,组合起来表示一个特定的字符。

常见转义字符及其用途

以下是C语言中常用的转义字符及其意义:

转义字符 含义
\n 换行符
\t 水平制表符
\b 退格符
\r 回车符
\' 单引号
\" 双引号
\\ 反斜杠
\a 警告(响铃)
\f 换页符
\v 垂直制表符
\0 空字符(NULL)
\ddd 八进制表示的字符
\xhh 十六进制表示的字符

使用示例

  1. 换行 (\n) 和 制表 (\t):
printf("Hello,\nWorld!\t2021\n");

输出:

Hello, 
World!  2021
  1. 单引号 (\') 和 双引号 (\"):
printf("It\'s a \"wonderful\" day.\n");

输出:

It's a "wonderful" day.
  1. 反斜杠 (\\):
printf("C:\\Program Files\\MyApp\n");

输出:

C:\Program Files\MyApp

特殊转义字符的应用

  1. 八进制和十六进制字符:

    • \ddd 表示一个八进制值对应的字符,ddd 是一到三个数字(0-7)。
    • \xhh 表示一个十六进制值对应的字符,hh 是一个或两个十六进制数字(0-9, A-F)。

示例:

printf("%c\n", '\101'); // 八进制表示的 'A'
printf("%c\n", '\x42'); // 十六进制表示的 'B'

输出:

A
B
  1. 响铃字符 (\a): 当打印此字符时,系统可能会发出响铃声(取决于系统配置)。
printf("\a");

注意事项

  • 在字符串和字符常量中使用转义字符。
  • \0(空字符)用于表示C字符串的结束。
  • 转义字符可以用于格式化输出,如换行、制表等。
  • 在处理文件路径或需要在字符串中包含引号时,转义字符非常有用。

猜你喜欢

转载自blog.csdn.net/qq_40951951/article/details/135777120