数据结构与算法中使用C语言编写,在VC++中运行,并在每行代码中加入注释 题目: 一、设str1="12345678",str2="abc"编写算法实现以下操作: 1.打印以上两个串的内容(遍历); 2.将str2插入str1,即"1234 abc 5678",并打印插入后的str1(插入操作); 3.在str1中查找str2的位置并输出位置(串的简单模式匹配); 4.将str1中的"abc"删除,并输出删除后的str1及其长度(删除操作); 5.将str2连接在str1之后,并输出连接后的str1及其长度(连接操作); 6.求str1从下标0开始,长度为5的子串,打印字串(求子串)。
时间: 2023-12-03 11:43:27 浏览: 35
以下是使用C语言编写的算法实现以上操作,注释已经加入每一行代码中:
```c
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "12345678"; // 定义字符串1
char str2[] = "abc"; // 定义字符串2
int len1 = strlen(str1); // 字符串1的长度
int len2 = strlen(str2); // 字符串2的长度
// 1. 打印字符串1和字符串2的内容(遍历)
printf("str1: ");
for (int i = 0; i < len1; i++) {
printf("%c", str1[i]);
}
printf("\n");
printf("str2: ");
for (int i = 0; i < len2; i++) {
printf("%c", str2[i]);
}
printf("\n");
// 2. 将str2插入str1,即"1234 abc 5678",并打印插入后的str1(插入操作)
char temp[100]; // 定义一个临时数组
int pos = 4; // 插入位置
strncpy(temp, str1, pos); // 复制字符串1中前pos个字符到临时数组中
temp[pos] = '\0'; // 在临时数组中插入空字符
strcat(temp, str2); // 在临时数组中连接字符串2
strcat(temp, &str1[pos]); // 在临时数组中连接字符串1中pos之后的字符
printf("str1 after insertion: %s\n", temp); // 输出插入后的str1
// 3. 在str1中查找str2的位置并输出位置(串的简单模式匹配)
char *p;
p = strstr(str1, str2); // 在字符串1中查找字符串2
if (p != NULL) {
printf("Position of str2 in str1: %ld\n", p - str1); // 输出字符串2在字符串1中的位置
}
else {
printf("Str2 not found in str1\n"); // 字符串2在字符串1中未找到
}
// 4. 将str1中的"abc"删除,并输出删除后的str1及其长度(删除操作)
p = strstr(str1, str2); // 在字符串1中查找字符串2
if (p != NULL) {
strcpy(p, &p[len2]); // 删除字符串2
printf("str1 after deletion: %s\n", str1); // 输出删除后的str1
printf("Length of str1 after deletion: %d\n", strlen(str1)); // 输出删除后的str1的长度
}
// 5. 将str2连接在str1之后,并输出连接后的str1及其长度(连接操作)
strcat(str1, str2); // 连接字符串1和字符串2
printf("str1 after concatenation: %s\n", str1); // 输出连接后的str1
printf("Length of str1 after concatenation: %d\n", strlen(str1)); // 输出连接后的str1的长度
// 6. 求str1从下标0开始,长度为5的子串,打印字串(求子串)
char substr[6]; // 定义一个长度为6的临时数组
strncpy(substr, str1, 5); // 复制字符串1中前5个字符到临时数组中
substr[5] = '\0'; // 在临时数组中插入空字符
printf("Substring of str1: %s\n", substr); // 输出子串
return 0;
}
```