重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
楼主的意思是在str1中删除str2中出现的字符?那么改成:
成都创新互联是一家专注于网站设计制作、成都网站设计与策划设计,揭东网站建设哪家好?成都创新互联做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:揭东等地区。揭东做网站价格咨询:18980820575
#includestdio.h
void main ()
{
char str1[9]={'t','i','n','m','f','g','y','f','s'};
char str2[3]={'A','s','g'};
int i,k,l;
for(i=0;i9;i++)
{
l=0;
for(k=0;k3;k++)
{
if (str1[i]=str2[k])
{l=1;break;}
}
if l!=1
printf("%c",str1[i]);
}
}
# includestdio.h
# includestdlib.h
# define M 5
struct student
{
int number;
char name[20];
struct student *next;
};
struct student *p,*pp,*q,*qq,*pop,*temp,*head=NULL;
void main()
{
struct student* cat(struct student *p,struct student *head,int n);
int i=1;
while(i=M)
{
q=(struct student *)malloc(sizeof(struct student));
printf("输入第%d个结点学号和姓名:(注意有空格)\n",i);
scanf("%d %s",q-number,q-name);
if(head==NULL)
head=p=q;
p-next=q; //将新分配的结点连起来
p=p-next; //指针p指向最后一个结点
q-next=NULL; //最后一个结点的指针域置空
i++;
}
//输出构造的学生链表,作对照
printf("未被删除前:\n");
p=head;
while(p!=NULL)
{
printf("%d\t%s",p-number,p-name);
printf("\n");
p=p-next;
}
int n;
printf("请输入要删除的位置");
scanf("%d",n);
//删除结点
p=head;
pp=cat(p,head,n);
printf("元素被被删除后:\n");
while(pp-next!=NULL)
{
printf("%d\t%s",pp-number,pp-name);
printf("\n");
pp=pp-next;
}
//输出最后一个结点
printf("%d\t%s\n",pp-number,pp-name);
}
//删除一个结点
struct student* cat(struct student *p,struct student *head,int n)
{
int i=1;
while(p!=NULL)
{
//for循环使p指向要被删除的结点.q指向被删除结点的前一个结点
for(i=1;in;i++)
{
q=p;
p=p-next;
}
if(p==head) //删除结点为头结点时
{
head=p-next;
free(p);
return head;
}
else if(p-next==NULL) //删除结点为尾结点时
{
q-next=NULL;
free(p);
return head;
}
else
{
q-next=p-next; //删除非头尾结点时
free(p);
return head;
}
}
}
/*测试数据如下:*/
/*
输入第1个结点学号和姓名:(注意有空格)
1000 wang
输入第2个结点学号和姓名:(注意有空格)
1001 li
输入第3个结点学号和姓名:(注意有空格)
1002 zhang
输入第4个结点学号和姓名:(注意有空格)
1003 yan
输入第5个结点学号和姓名:(注意有空格)
1004 zhao
未被删除前:
1000 wang
1001 li
1002 zhang
1003 yan
1004 zhao
请输入要删除的位置1
元素被被删除后:
1001 li
1002 zhang
1003 yan
1004 zhao
*/
/*
输入第1个结点学号和姓名:(注意有空格)
1000 wang
输入第2个结点学号和姓名:(注意有空格)
1001 li
输入第3个结点学号和姓名:(注意有空格)
1002 zhang
输入第4个结点学号和姓名:(注意有空格)
1003 yan
输入第5个结点学号和姓名:(注意有空格)
1004 zhao
未被删除前:
1000 wang
1001 li
1002 zhang
1003 yan
1004 zhao
请输入要删除的位置3
元素被被删除后:
1000 wang
1001 li
1003 yan
1004 zhao
*/
/*
输入第1个结点学号和姓名:(注意有空格)
1000 wang
输入第2个结点学号和姓名:(注意有空格)
1001 li
输入第3个结点学号和姓名:(注意有空格)
1002 zhang
输入第4个结点学号和姓名:(注意有空格)
1003 yan
输入第5个结点学号和姓名:(注意有空格)
1004 zhao
未被删除前:
1000 wang
1001 li
1002 zhang
1003 yan
1004 zhao
请输入要删除的位置5
元素被被删除后:
1000 wang
1001 li
1002 zhang
1003 yan
*/
既然是数组,表示数据为线性阵列了,想删除其中一个数据,是不可能的,只能用该位置以后的数据整体平移一个位置覆盖当前位置。例如:数组数据 1 2 3 4 5 6 7,想删除3,那么得到的新数组为1 2 4 5 6 7,其中 4 5 6 7 数据的位置相对原始数组位置整体平移减小1。
当然想是想快速删除数据,可以考虑使用数据链表,对数组单链即可