C语言中的字符与字符串

在 C 语言中,字符(char)和字符串(string)是两个基本的数据类型。字符是单一的字符数据,而字符串是由多个字符组成的字符数组。了解字符和字符串的处理方式是学习 C 语言的重要步骤。

1. 字符(char)

在 C 语言中,字符是存储单个字符的基本数据类型。字符类型通常用 char 来表示,大小为一个字节(8 位)。字符常量通常用单引号 ' ' 包围。例如,'A''1''@' 等都是有效的字符常量。

字符的表示:

  • 字符变量存储的是字符的 ASCII 码(或 Unicode 编码)。
  • 例如,字符 'A' 的 ASCII 值是 65。

示例代码:

#include <stdio.h>

int main() {
    char c = 'A';  // 声明字符变量并赋值
    printf("Character: %c\n", c);  // 输出字符 A
    printf("ASCII value of %c: %d\n", c, c);  // 输出字符的 ASCII 值
    return 0;
}

输出:

Character: A
ASCII value of A: 65

字符常量与整数的关系:

C语言中的字符常量本质上是整数。你可以直接使用字符的 ASCII 码来赋值字符变量。

#include <stdio.h>

int main() {
    char c = 65;  // 'A' 的 ASCII 值
    printf("Character: %c\n", c);  // 输出字符 A
    return 0;
}

输出:

Character: A

2. 字符串(String)

在 C 语言中,字符串是一组字符的集合。C 中的字符串是通过字符数组来实现的,以 空字符 '\0'(ASCII 值为 0)作为结束标志。

字符串的表示:

  • 字符串由一系列字符组成,字符通过双引号 "" 包裹。
  • 字符串会自动包含一个 空字符 '\0' 作为结尾。
  • 字符串常量实际上是一个指向字符数组的指针。

示例代码:

#include <stdio.h>

int main() {
    char str[] = "Hello, World!";  // 声明并初始化字符串
    printf("String: %s\n", str);  // 输出字符串
    return 0;
}

输出:

String: Hello, World!

字符数组与字符串:

  • 字符串本质上是字符数组,因此可以像普通数组一样访问其中的元素。
  • 字符串以 '\0' 结尾,表示字符串的结束。
#include <stdio.h>

int main() {
    char str[] = "Hello";
    printf("First character: %c\n", str[0]);  // 输出 H
    printf("Last character: %c\n", str[4]);  // 输出 o
    return 0;
}

输出:

First character: H
Last character: o

3. 转义字符(Escape Sequences)

C 语言中的 转义字符 是用反斜杠 \ 来表示的特殊字符。它们通常用于表示无法直接输入的字符,例如换行符、制表符、双引号等。转义字符通常出现在字符串中,用于控制输出的格式。

常见的转义字符:

  • \n:换行符,表示输出一个新行。
  • \t:水平制表符,用于插入一个制表符。
  • \\:反斜杠字符,用于输出反斜杠。
  • \':单引号字符,用于输出单引号。
  • \":双引号字符,用于输出双引号。
  • \r:回车符,通常与换行符一起使用。
  • \b:退格符,删除前一个字符。
  • \0:空字符,用于标记字符串的结束。

转义字符的示例:

#include <stdio.h>

int main() {
    printf("Hello, World!\n");  // 输出并换行
    printf("Tab\tExample\n");  // 插入制表符
    printf("Double quote: \"Hello\"\n");  // 输出双引号
    printf("Single quote: \'Hello\'\n");  // 输出单引号
    printf("Backslash: \\\n");  // 输出反斜杠
    return 0;
}

输出:

Hello, World!
Tab    Example
Double quote: "Hello"
Single quote: 'Hello'
Backslash: \

4. 字符串函数

C 标准库提供了许多用于操作字符串的函数,以下是一些常用的字符串操作函数:

1. strlen():计算字符串的长度(不包括空字符 \0)。

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

int main() {
    char str[] = "Hello";
    printf("Length of string: %lu\n", strlen(str));  // 输出 5
    return 0;
}

2. strcpy():复制一个字符串到另一个字符串。

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

int main() {
    char src[] = "Hello";
    char dest[10];
    strcpy(dest, src);  // 将 src 字符串复制到 dest
    printf("Destination string: %s\n", dest);  // 输出 Hello
    return 0;
}

3. strcmp():比较两个字符串。

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

int main() {
    char str1[] = "Hello";
    char str2[] = "Hello";
    if (strcmp(str1, str2) == 0) {
        printf("Strings are equal\n");
    } else {
        printf("Strings are not equal\n");
    }
    return 0;
}

输出:

Strings are equal

4. strcat():连接两个字符串。

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

int main() {
    char str1[20] = "Hello";
    char str2[] = " World!";
    strcat(str1, str2);  // 将 str2 连接到 str1 后面
    printf("Concatenated string: %s\n", str1);  // 输出 Hello World!
    return 0;
}

5. sprintf():将格式化的输出写入字符串。

#include <stdio.h>

int main() {
    char str[50];
    int num = 100;
    sprintf(str, "The number is %d", num);  // 将格式化的输出存储在 str 中
    printf("Formatted string: %s\n", str);  // 输出 The number is 100
    return 0;
}

5. 示例:处理字符与字符串

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

int main() {
    char ch = 'A';
    char str[50] = "Hello, ";
    printf("Character: %c\n", ch);  // 输出单个字符 A
    printf("ASCII value of %c: %d\n", ch, ch);  // 输出 A 的 ASCII 值
    
    strcat(str, "World!");  // 连接字符串
    printf("Concatenated String: %s\n", str);  // 输出 Hello, World!
    
    printf("Length of string: %lu\n", strlen(str));  // 输出字符串长度
    return 0;
}

输出:

Character: A
ASCII value of A: 65
Concatenated String: Hello, World!
Length of string: 13

总结

  1. 字符(char) 用来存储单个字符,可以通过 ASCII 值来表示。
  2. 字符串 是字符数组,以空字符 '\0' 结尾。可以使用标准库函数来操作字符串(如 strlen()strcpy()strcmp() 等)。
  3. 转义字符 在字符串中用于表示一些特殊字符,常见的如换行符 \n、制表符 \t、双引号 \" 等。

字符和字符串是 C 语言中处理文本和字符数据的基础,通过灵活运用它们,你可以实现各种文本操作和数据处理。