字符串采用带头结点的单链表存储,设计算法在字符串S中删除从第i个位置开始,长度为len的字串;
时间: 2024-05-12 20:19:14 浏览: 8
1. 首先,需要找到第i个节点的前一个节点p和第i+len个节点q。
2. 将p的next指针指向q的next节点,即跳过了需要删除的节点。
3. 释放被删除的节点的空间。
4. 返回原链表的头节点。
代码实现:
```
void deleteSubStr(LinkList &S, int i, int len) {
if (i < 1 || len < 1) {
return;
}
LNode *p = S;
for (int j = 1; j < i && p != NULL; j++) {
p = p->next;
}
if (p == NULL || p->next == NULL) {
return;
}
LNode *q = p->next;
for (int j = 1; j <= len && q != NULL; j++) {
LNode *temp = q;
q = q->next;
free(temp);
}
p->next = q;
}
```
相关问题
设计算法在字符串S中删除从第i个位置开始,长度为len的字串;
1. 首先判断i和len的合法性,如果i<0或i+len>len(S),则返回原字符串S;
2. 将字符串S分为三部分:从0到i-1的子串、从i+len到末尾的子串以及从i到i+len-1的子串;
3. 将前两部分拼接起来,即可得到删除了从第i个位置开始,长度为len的子串后的字符串。
具体实现代码如下:
```python
def delete_substring(S, i, length):
if i < 0 or i + length > len(S):
return S
else:
return S[:i] + S[i+length:]
```
例如,对于字符串S="hello world",删除从第2个位置开始,长度为3的子串,即删除"llo",得到新字符串为"he world",可以调用函数delete_substring(S, 2, 3)实现。
编写一个程序,在字符串中删除指定位置pos开始长度为len的字串(字符串的字符个数不超过1000)。
```
#include <stdio.h>
#include <string.h>
int main()
{
char str[1001];
int pos, len;
printf("请输入字符串:");
gets(str);
printf("请输入要删除的位置和长度(用空格隔开):");
scanf("%d %d", &pos, &len);
int str_len = strlen(str);
if (pos >= str_len || pos < 0 || len < 0)
{
printf("输入的位置或长度不合法!\n");
return 0;
}
if (pos + len > str_len)
{
len = str_len - pos;
}
memmove(str + pos, str + pos + len, str_len - pos - len + 1);
printf("删除后的字符串为:%s\n", str);
return 0;
}
```