大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
楼主的意思是在str1中删除str2中出现的字符?那么改成:
创新互联公司-专业网站定制、快速模板网站建设、高性价比乌拉特后网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式乌拉特后网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖乌拉特后地区。费用合理售后完善,10年实体公司更值得信赖。
#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]);
}
}
void del()
{
STU a[20]; char tname[20];
int i=0,j,n=0;
FILE *fp;
printf("\t\t\t请输入要删除的姓名:");
scanf("%s",tname);
/*****以下内容是读取文件信息,并将文件中的信息与用户输入的姓名做比较,如果姓名相同,则删除该学生信息***/
if((fp=fopen("e:\\file1","rb"))==NULL) //打开文件file1
{printf("error!\n");exit(0);} //打开失败,报错并退出系统
while(fread(a[n],sizeof(STU),1,fp)!=0) //打开成功,每次从文件中读入一个STU结构大小的数据,并将其存入数组a[]中。直到文件内容结束。
n++;
/**该循环用于查找**/
for(i=0;in;i++)
if(strcmp(a[i].name,tname)==0) break; //找到姓名相同的学生了,结束循环。
if(i==n) //找完一遍,没找到
{ printf("\t\t\t没有找到!\n");
fclose(fp); //关闭文件file1
}
else //找到了同姓名的学生
{
/**该循环用于删除该学生信息**/
for(j=i;jn-1;j++) //从找到该学生的位置开始,依次把后面的数据前移,覆盖掉前一个
{
a[j]=a[j+1];
}
n=n-1; //学生总数减1
/****以下内容是更新文件,并提示用户删除成功****/
if((fp=fopen("e:\\file1","wb"))==NULL) //再次打开文件file1,把删除之后的信息保存到文件中
{printf("error!\n");exit(0);}
fwrite(a,sizeof(STU),n,fp); //每次往文件中写入一个学生的信息(即一个STU大小)
fclose(fp);
printf("\t\t\t删除成功!\n");
system("pause"); //页面显示诸如“按任意键继续……”
}
}
/*****************************************************************
【作者日期】test 2013-06-01
【函数功能】根据学生ID删除学生信息
【输入参数】头结点指针
【输出参数】头结点指针
【函数返回】头结点指针
【算法说明】入参检查要全面及出错信息处理要完善
【修改记录】
*****************************************************************/
Link *DelInfo(Link *head)
{
//clearScreen();
Link *tail;//
Link *tmp;
Link *nhead;
int pID;
tail = NULL;
tmp = head;
nhead = head;
pID = 0;
if(NULL == head)
{
printf("empty link.\n");
// WaitSys();
return head;
}
tail = head-next;
printf("Please input the ID(which you want to del): \n");
scanf("%d", pID);
getchar();
//删除的是头结点
if(tmp-ID == pID)
{
tmp = tmp-next;
nhead = tmp;
free(tmp);
if(NULL != tmp)
tmp = NULL;
return nhead;
}
//删除其他位置
while(tail)
{
if(tail-ID == pID)
{
tmp-next = tail-next;
free(tail);
if(NULL != tail)
tail = NULL;
return nhead;
}
else
{
tmp = tmp-next;
tail = tail-next;
if(NULL == tail)
{
printf("你输入的ID不存在\n");
WaitSys();
return nhead;
}
}
}
return nhead;
}
希望对楼主有所帮助!
struct student* del(struct student* head)
{
if (NULL == head)//如果链表为空,则直接返回
return head;
struct student* p, *q;
int num;
p = head;
printf("请输入要删除学生的学号:\n");
scanf("%d", num);//这里不需要再申请结构体空间,直接放int变量就可以了
// 循环查找,直到找到或者链表结束为止
while (p != NULL p-num != num)
{
q = p;//q用来保存上一节点,再删除当前节点时会用到,见p!=NULL
p = p-next;
}
//while结束后,p==NULL,则表示没有找到
//如果找到第一个p一定不为NULL,因为第一句已经判断,head后移一次
if (p == head)
head = head-next;//头结点改变
else if (p != NULL)
{
q-next = p-next;//断开要删除的节点
p-next = NULL;
}
//如果找到,则需要释放删除的节点的空间,避免内存泄露
if (p != NULL)
free(p);
return head;//由于可能改变了头结点,所以需要返回头结点
}
void main()
{
struct student*head;
head=create();
system("cls");
print(head);
getchar();
getchar();
head = del(head);//这里需要得到头结点,因为头结点可能改变了
getchar();
getchar();
system("cls");
print(head);
}
按照上面的改就没问题了,有不懂的再问
不好意思,早上出去玩了