使用c语言设字符串采用单字符的链式存储结构,要求写一算法能实现删除串s从位置i开始长度为k的子串。 输入格式: 一共有两行,第一行有一串连续的字符串,并且以#结束。第二行i,k分别表示需要删除的位置(从1开始计数)和删除的长度(题目保证删除的长度不超过字符串的长度)。 输出格式: 输出删除后的字符串。 输入样例: It is never too late to mend.# 7 6 输出样例: It is too late to mend.
时间: 2023-06-13 09:08:37 浏览: 173
以下是实现删除子串的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单字符链表的结构体
struct node {
char data;
struct node *next;
};
// 初始化单字符链表
struct node *init() {
struct node *head = (struct node*)malloc(sizeof(struct node));
head->next = NULL;
return head;
}
// 插入单字符节点
void insert(struct node *head, char c) {
struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = c;
new_node->next = head->next;
head->next = new_node;
}
// 删除子串
void delete_substring(struct node *head, int i, int k) {
struct node *p = head->next;
struct node *prev = head;
int j = 1;
// 找到要删除的子串的起始节点p和前一个节点prev
while (p && j < i) {
prev = p;
p = p->next;
j++;
}
// 删除子串
while (p && j <= i + k - 1) {
struct node *temp = p;
p = p->next;
free(temp);
j++;
}
prev->next = p;
}
// 输出单字符链表
void print(struct node *head) {
struct node *p = head->next;
while (p) {
printf("%c", p->data);
p = p->next;
}
}
int main() {
struct node *head = init();
char c;
// 读入字符串
while ((c = getchar()) != '#') {
insert(head, c);
}
int i, k;
scanf("%d %d", &i, &k);
delete_substring(head, i, k);
print(head);
return 0;
}
```
输入样例:
```
It is never too late to mend.#
7 6
```
输出样例:
```
It is too late to mend.
```
阅读全文