设字符串采用单字符的链式存储结构,要求写一算法能实现删除串s从位置i开始长度为k的子串。 输入格式: 一共有两行,第一行有一串连续的字符串,并且以#结束。第二行i,k分别表示需要删除的位置(从1开始计数)和删除的长度(题目保证删除的长度不超过字符串的长度)。 输出格式: 输出删除后的字符串。 输入样例: It is never too late to mend.# 7 6 输出样例: It is too late to mend. 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB C (gcc) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include·<stdio.h> #include·<stdlib.h> #define·MAXSIZE·1000 typedef·struct·Node·{ ····char·data; ····struct·Node·*next; }·Node,·*LinkString; void·InitLinkString(LinkString·*L)·{ ····*L·=·(LinkString)·malloc(sizeof(Node)); ····(*L)->next·=·NULL; } void·CreateLinkString(LinkString·*L)·{ ····char·c; ····Node·*p,·*q; ····p·=·*L; ····while·((c·=·getchar())·!=·'#')·{ ········q·=·(Node·*)·malloc(sizeof(Node)); ········q->data·=·c; ········q->next·=·NULL; ········p->next·=·q; ········p·=·q; ····} } void·DeleteLinkString(LinkString·*L,·int·i,·int·k)·{ ····Node·*p,·*q; ····int·j·=·0; ····p·=·*L; ····while·(j·<·i·-·1)·{ ········p·=·p->next; ········j++; ····}用C语言编程
时间: 2023-12-10 12:03:48 浏览: 71
java实现字符串匹配求两个字符串的最大公共子串
以下是完整的代码实现:
```C
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
char data;
struct Node* next;
} Node, *LinkString;
void InitLinkString(LinkString* L) {
*L = (LinkString) malloc(sizeof(Node));
(*L)->next = NULL;
}
void CreateLinkString(LinkString* L) {
char c;
Node* p, * q;
p = *L;
while ((c = getchar()) != '#') {
q = (Node*) malloc(sizeof(Node));
q->data = c;
q->next = NULL;
p->next = q;
p = q;
}
}
void DeleteLinkString(LinkString* L, int i, int k) {
Node* p, * q;
int j = 0;
p = *L;
while (j < i - 1) {
p = p->next;
j++;
}
q = p->next;
while (k > 0) {
p->next = q->next;
free(q);
q = p->next;
k--;
}
}
void PrintLinkString(LinkString L) {
Node* p = L->next;
while (p) {
printf("%c", p->data);
p = p->next;
}
printf("\n");
}
int main() {
LinkString L;
int i, k;
InitLinkString(&L);
CreateLinkString(&L);
scanf("%d%d", &i, &k);
DeleteLinkString(&L, i, k);
PrintLinkString(L);
return 0;
}
```
主要思路是先通过 `CreateLinkString` 函数创建链式存储结构的字符串,然后通过 `DeleteLinkString` 函数实现删除指定位置和长度的子串,最后通过 `PrintLinkString` 函数输出删除后的结果。
需要注意的是,删除操作需要先找到被删除子串的前一个节点,然后考虑如何删除该子串。可以使用一个指针 `q` 来指向被删除子串的第一个节点,然后在循环中不断删除该节点,并将 `q` 指向下一个节点。
阅读全文