关键点: “覆盖”思想
假设下标从0开始。每次只删一个元素。
1.各种情况及思路
情况1:删除尾元素(最简单)
思路:其他元素不变,去掉最后一个元素
实现:只需将数组长度减一,系统自动忽略最后一个元素
情况2:删除首元素
思路:所有元素均向前移1位;
实现:用后一个元素的值覆盖前一个元素的值。a[i]=a[i+1]
//删除首元素
for(int i=0;i<len-1;i++)
{
a[i]=a[i+1];
}
len=len-1;
注意:每次删除完一个元素之后,数组长度减一。
情况3:删除中间第i个元素
思路:第i个元素前面的元素顺序不变,第i+1个元素到最后一个元素均向前移1位
实现:从第i个元素开始,用第i+1的元素的值覆盖第i个元素,即用后一个元素的值覆盖前一个元素的值。
//删除下标为i的元素
for(int k=i;k<len-1;k++)
{
a[k]=a[k+1];
}
len=len-1;
完整代码:
#include<stdio.h>
#include<string.h>
char a[260];
int main()
{
//字符串输入
scanf("%s",a);
//输入下标i
int i;
scanf("%d",&i);
int len=strlen(a);
//删除下标为i的元素
for(int k=i;k<len-1;k++)
{
a[k]=a[k+1];
}
len=len-1;
//字符串输出
for(int i=0;i<len;i++)
{
printf("%c",a[i]);
}
return 0;
}