使用 strcat()
本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 17 课,共 63 课。
你已经学会了如何用 strcpy() 复制字符串,但如果你想把两个字符串连接起来呢?这称为拼接,C 提供了来自 <string.h> 库的 strcat() 函数来实现这一功能。
strcat() 函数会将一个字符串的内容追加到另一个字符串的末尾。它接受两个参数:目标字符串(会被修改)和源字符串(会被添加到末尾)。
#include <stdio.h>
#include <string.h>
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name); // greeting 现在包含 "Hello World"目标字符串必须有足够的空间来容纳原有内容和追加的新内容,这一点至关重要。strcat() 函数会找到目标字符串中的空终止符,将其移除,把源字符串复制到该位置,并在最末尾添加一个新的空终止符。
有时,你需要将一个数字(比如 int)拼接到字符串中。由于 strcat() 只能用于字符数组,你需要先将数字转换为字符串。你可以使用 sprintf() 来完成这件事,它的工作方式与 printf() 类似,但会将格式化后的结果写入字符数组,而不是打印到屏幕上。sprintf() 属于 <stdio.h>,大多数 C 程序都已经包含了它。
int n = 42;
char numStr[20];
sprintf(numStr, "%d", n); // numStr 现在包含字符串 "42"将数字以字符串形式存储在 numStr 中后,你就可以像往常一样使用 strcat() 将它追加到另一个字符串中:
char summary[100] = "Total people processed: ";
int n = 3;
char numStr[20];
sprintf(numStr, "%d", n);
strcat(summary, numStr); // summary 现在包含 "Total people processed: 3"这个函数对于用较小的片段构建较长的字符串至关重要,例如用单个词语组成完整的句子,或将用户输入与预定义文本组合起来。
挑战
简单编写一个 C 程序,使用 strcat() 函数拼接字符串,生成个性化消息。你的程序应当:
- 读取一个整数
n,表示要处理的人数 - 对每个人:
- 从输入中读取其名字
- 从输入中读取其姓氏
- 创建一个名为
fullName、包含 100 个元素的字符数组 - 使用
strcpy()将名字复制到fullName中 - 使用
strcat()将一个空格 " " 追加到fullName中 - 使用
strcat()将姓氏追加到fullName中 - 创建一个名为
greeting、包含 150 个元素的字符数组 - 使用
strcpy()将 "Hello, " 复制到greeting中 - 使用
strcat()将fullName追加到greeting中 - 使用
strcat()将 "! Welcome to our program." 追加到greeting中 - 打印最终的问候消息
- 处理完所有人后,创建一条汇总消息:
- 创建一个名为
summary、包含 100 个元素的字符数组 - 使用
strcpy()将 "Total people processed: " 复制到summary中 - 将数字
n转换为字符串,并使用strcat()将其追加到summary中 - 打印汇总消息
- 创建一个名为
记得包含 <string.h> 头文件,以便使用字符串函数。
你的输出应按以下格式显示结果:
Hello, [FirstName LastName]! Welcome to our program.
Hello, [FirstName LastName]! Welcome to our program.
...
Total people processed: [n]例如,如果输入为:
2
John
Doe
Alice
Smith你的输出应为:
Hello, John Doe! Welcome to our program.
Hello, Alice Smith! Welcome to our program.
Total people processed: 2这个挑战将测试你对使用 strcat() 拼接多个字符串的理解,以及如何结合使用 strcpy() 初始化字符串,并逐步使用多个部分构建复杂字符串。
亲手试试
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main() {
// 读取人数
int n;
scanf("%d", &n);
// TODO:在下方编写你的代码
// 处理每个人的信息并生成问候消息
// 然后生成并显示汇总消息
return 0;
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: C 在线编译器