重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、打开Sublime Text软件,新建一个C语言文件,然后导入C语言库
站在用户的角度思考问题,与客户深入沟通,找到枣强网站设计与枣强网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站建设、做网站、企业官网、英文网站、手机端网站、网站推广、主机域名、虚拟主机、企业邮箱。业务覆盖枣强地区。
2、接下来新建C语言的main函数,对文件的操作都会在main函数中进行
3、接下来调用C语言的fopen函数对文件进行打开操作
4、当打开文件以后就可以通过fgetc函数读取文件里面的内容
#include stdio.h
void deletex(int a[],int n,int x)
{int i;
for(i=0;ina[i]x;i++);
if(i==n||a[i]x)
{printf("fail!\n"); return;}
for(;in;i++)a[i]=a[i+1];
n--;
for(i=0;in;i++)
printf("%d ",a[i]);
printf("\n");
}
int main()
{int n,i,x,a[200];
char c=' ';
for(n=0;c!='\n';n++)
scanf("%d%c",a[n],c);
scanf("%d",x);
deletex(a,n,x);
return 0;
}
既然是数组,表示数据为线性阵列了,想删除其中一个数据,是不可能的,只能用该位置以后的数据整体平移一个位置覆盖当前位置。例如:数组数据 1 2 3 4 5 6 7,想删除3,那么得到的新数组为1 2 4 5 6 7,其中 4 5 6 7 数据的位置相对原始数组位置整体平移减小1。
当然想是想快速删除数据,可以考虑使用数据链表,对数组单链即可
# 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
*/
有两种方法可以实现。为方便说明,定义整型数组a,并实现将a清空。inta[4]={1,2,3,4};1、通过数组遍历,逐个赋值为0。定义循环变量inti;for(i=0;i4;i++)a[i]=0;该程序功能为遍历数组a,逐个将元素赋值为0,实现清空效果。2、借助内存赋值函数memset,整体赋值为0。void*memset(void*dst,intvalue,size_tsize);这个函数的功能为将src上,大小为size字节的数据赋值为value。需要注意的是,该函数赋值是以字节为单位的。调用该函数时需要引用头文件string.h,即#includestring.h清空数组的代码为memset(a,0,sizeof(a));
楼主的意思是在str1中删除str2中出现的字符?那么改成:
#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]);
}
}