结构体数组比较大小(结构体型数组)
两个结构体数组比较Comp(tagAnswer *Ans,tagAnswer *AnsRead,int n)
这里我想知道,你想什么时候comp函数返回true,是所有数组中的对应元素都相等吗?
什么时候返回false,是只要有一个元素不相等,就返回?
看你的代码,与上面的情况相反,是不相同返回true,相同返回false?究竟是那种情况?
你的程序中,比较第一个元素时,就会直接返回true/false,接着退出该函数,而且char数组是不能直接判断相等不相等的,如果数组可以直接判断相等不相等的话,哪你就不用写comp了,直接比较就可以了。
另外,我知道你程序是想给出说明,但是还是要严谨一些,像main函数是一个特殊的函数,不要随便使用这个名字。如果是在C语言中,是没有true和false定义的,你是否定义了?c++好像不需要。
下面是我一种修改方案,看是否符合你的要求
它是不相等是返回true,都相等时返回false。
#includestring.h
typedef struct {
char gddm[10];
char gdxm[10];
char jysdm[10];
} tagAnswer;
int comp(tagAnswer *Ans,tagAnswer *AnsRead,int n)
{
int i;
for(i=0;in;i++)
{
if(strcmp(Ans[i].gddm,AnsRead[i].gddm) !=0 || strcmp(Ans[i].gdxm,AnsRead[i].gdxm)!=0 || strcmp(Ans[i].jysdm,AnsRead[i].jysdm)!=0)
return true;
}
return false;
}
c语言结构体数组 下面的代码为什么无法执行比较大小的部分
#include stdio.h
#include string.h
#include stdlib.h
#define N 20
typedef struct
{
char name[N];
char idnum[N];
float yw;
}stu;
stu b[N];
int shuru(stu *p);
void max(stu *s,int a);
int main()
{
int k=0;
while(true)
{
printf("开始输入学生的信息\n");
k=shuru(b);
printf("找出最高分\n");
max(b,k);
}
return 0;
}
int shuru(stu *p)
{
int i=0;
printf("输入学生信\n");
do
{ scanf("%s",p-name);
scanf("%s",p-idnum);
scanf("%f",(p-yw));
if(!strcmp(p-name,"end"))
{
break;
}
p++;
i++;
}while(true);
return i;
}
void max(stu *s,int a)
{
float max;
int i;
s=b;
max=s[0].yw;
for(i=1;ia;i++)
{
if(maxs[i].yw)
max=s[i].yw;
}
printf("%f",max);
}
这个是改了下的代码,原因在于
do
{ scanf("%s",p-name);
scanf("%s",p-idnum);
scanf("%f",(p-yw));
p++;
i++;
}while(strcmp((--p)-name,"end"));
中,你让p++,然后--p,所以被赋值一直都是b[0],所以不会对的,比较函数木有错。
怎么用快速排序法比较结构体数组中成员中字符串的大小?比如有一个结构体数组,里面有 char s[1
#include?stdio.h
#include?string.h
struct?A{
char?s[10];
int?no;
};
int?main(){
struct?A?a[5]={"asd",1,"qwe",2,"zxc",3,"rty",4,"vbn",5};
struct?A?*p[5]={a[0],a[1],a[2],a[3],a[4]},*t;
for(int?i=1;i5;i++){
????t=p[i];
for(int?j=i-1;j=0;j--)
if(strcmp(t-s,p[j]-s)0){
p[j+1]=p[j];
p[j]=t;
}
}
for(i=0;i5;i++)
printf("%d?",p[i]-no);
printf("\n");
}
这个程序只是用结构体A做了个排序的例子,至于你要结构体中有我不知道,你自己加吧。
我就加了个no,让你看看结果而已。