侧边栏壁纸
博主头像
编程之家 博主等级

行动起来,活在当下

  • 累计撰写 37 篇文章
  • 累计创建 3 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

C语言程序设计:16.字符数组及字符串

李航
2025-12-02 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

C语言程序设计:字符数组及字符串

1. 引入

在C语言中,字符串是一个非常常见的数据类型。字符串实际上是由字符数组组成的,而字符数组是C语言中的基本数据结构之一。字符串的处理涉及字符数组的操作,包括字符的存储、访问、修改、拼接等。理解如何正确使用字符数组和字符串,将为你更好地处理文本数据打下基础。

在本篇文章中,我们将深入探讨字符数组和字符串的定义、初始化、操作以及常用的字符串处理函数。


2. 字符数组的定义与初始化

2.1 字符数组的定义

字符数组是由多个字符组成的一维数组,每个字符通常占用1个字节(在ASCII编码下)。字符数组在C语言中用来存储字符串。

字符数组的定义形式为:

char array_name[size];
  • array_name:数组的名称。
  • size:字符数组的大小,即可以存储多少个字符。

示例:定义一个字符数组

char str[10];  // 定义一个字符数组,最大存储10个字符

2.2 字符数组的初始化

字符数组可以通过以下两种方式进行初始化:

1. 显式初始化(每个字符指定值)

char str[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

在这个例子中,字符数组 str 存储了字符串 "Hello",并且最后一个字符是 '\0',表示字符串的结束。

2. 使用字符串常量初始化(更常用)

char str[] = "Hello";

在这种方式下,编译器会自动推导字符数组的大小,并在字符串末尾自动加上 '\0' 字符。


3. 字符串的操作

3.1 访问字符数组中的元素

字符数组中的每个字符可以通过索引进行访问,索引从 0 开始。例如:

char str[] = "Hello";
printf("%c\n", str[0]);  // 输出 H

3.2 修改字符数组中的元素

字符数组的元素可以通过索引直接修改:

char str[] = "Hello";
str[0] = 'h';  // 将 'H' 改为 'h'
printf("%s\n", str);  // 输出 hello

3.3 字符数组的遍历

字符数组的遍历通常通过循环结构实现,直到遇到结束符 '\0' 为止。

char str[] = "Hello";
for (int i = 0; str[i] != '\0'; i++) {
    printf("%c ", str[i]);
}
// 输出:H e l l o

4. 字符串的常用函数

C语言提供了一些标准库函数来操作字符串,它们定义在 <string.h> 头文件中。下面介绍几个常用的字符串操作函数。

4.1 strlen() — 计算字符串长度

strlen() 函数用于计算一个字符串的长度(不包括字符串的结束符 '\0')。

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

int main() {
    char str[] = "Hello";
    printf("字符串长度:%lu\n", strlen(str));  // 输出:5
    return 0;
}

4.2 strcpy() — 字符串复制

strcpy() 函数用于将一个字符串复制到另一个字符串中。

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

int main() {
    char str1[] = "Hello";
    char str2[6];
    strcpy(str2, str1);  // 将str1的内容复制到str2
    printf("str2的内容:%s\n", str2);  // 输出:Hello
    return 0;
}

4.3 strcat() — 字符串拼接

strcat() 函数用于将两个字符串拼接起来。

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

int main() {
    char str1[20] = "Hello";
    char str2[] = " World";
    strcat(str1, str2);  // 拼接str2到str1
    printf("拼接后的字符串:%s\n", str1);  // 输出:Hello World
    return 0;
}

4.4 strcmp() — 字符串比较

strcmp() 函数用于比较两个字符串的大小。

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

int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    int result = strcmp(str1, str2);
    if (result == 0) {
        printf("两个字符串相同\n");
    } else if (result < 0) {
        printf("str1 小于 str2\n");
    } else {
        printf("str1 大于 str2\n");
    }
    return 0;
}

4.5 strchr() — 查找字符

strchr() 函数用于查找字符串中首次出现的字符。

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

int main() {
    char str[] = "Hello, World!";
    char *ptr = strchr(str, 'o');  // 查找字符'o'
    if (ptr != NULL) {
        printf("字符'o'第一次出现在位置:%ld\n", ptr - str);  // 输出位置
    } else {
        printf("字符未找到\n");
    }
    return 0;
}

5. 字符数组和字符串的常见错误

5.1 忘记给字符串添加结束符 '\0'

字符串必须以 '\0' 结尾,这是C语言中标识字符串结束的方式。如果没有正确添加结束符,很多字符串操作(如 strlen())将无法正确工作。

5.2 数组越界

当操作字符数组时,必须确保不越过数组的边界。例如,如果你声明了一个字符数组大小为 10,但只给它 5 个字符,那么只能在前 5 个位置访问数据,后续的操作可能会导致内存错误。

5.3 使用 strcpy() 时要小心目标数组的大小

在使用 strcpy() 时,如果目标字符数组的空间不足以存储源字符串(包括结束符 '\0'),会发生溢出,导致程序崩溃或不可预测的行为。要确保目标数组有足够的空间来存储复制的内容。


6. 总结

  • 字符数组:用于存储单个字符的数据,可以通过索引访问和修改。
  • 字符串:在C语言中,字符串是以字符数组的形式存储,并且以 '\0' 作为结束符。
  • 常用函数:C语言提供了一些常用的字符串处理函数,如 strlen()strcpy()strcat()strcmp() 等,用于计算字符串长度、复制字符串、拼接字符串等操作。
  • 常见问题:在操作字符串时要特别注意字符串结束符、数组越界以及目标数组大小等问题。

7. 练习题

1. 题目:编写一个程序,输入一个字符串,输出该字符串的长度。

答案:

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

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str);  // 获取输入字符串
    printf("字符串的长度是:%lu\n", strlen(str));
    return 0;
}

2. 题目:编写一个程序,输入两个字符串,比较它们是否相同。

答案:

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

int main() {
    char str1[100], str2[100];
    printf("请输入第一个字符串:");
    gets(str1);
    printf("请输入第二个字符串:");
    gets(str2);

    if (strcmp(str1, str2) == 0) {
        printf("两个字符串相同\n");
    } else {
        printf("两个字符串不同\n");
    }
    return 0;
}

3. 题目:编写一个程序,输入两个字符串,将第二个字符串拼接到第一个字符串后面并输出。

答案:

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

int main() {
    char str1[100], str2[100];
    printf("请输入第一个字符串:");
    gets(str1);
    printf("请输入第二个字符串:");
    gets(str2);

    strcat(str1, str2);  // 拼接第二个字符串到第一个字符串
    printf("拼接后的字符串是:%s\n", str1);
    return 0;
}

通过这些基础的练习,您将能够更熟练地操作字符数组和字符串,并掌握字符串的常见处理方法。

0

评论区