关于C语言的结构体中元素的筛选,排列顺序。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于C语言的结构体中元素的筛选,排列顺序。相关的知识,希望对你有一定的参考价值。
这是我写的一个程序。先定义了一个结构体person,结构体类型数组per和结构体类型指针,p,q。我是想从结构体数组中,按照字母顺序,从小到大的,把姓名排列,并且输出。我是一个初学者啊,希望高手能帮我看看,我的这个程序怎么出错了,应该怎么改正。谢谢大家了~~~
#include "stdafx.h"
#include "string"
void main()
struct person
char name[20];
char sex;
int age;
float height;
per[7]="Li Ping",'M',22,178.2,"Gao Ming",'F',23,171.5,"Zhao Er",'F',32,168.6,"Wang Ying",'F',20,158.9,"Zhang Xiao",'M',25,181.0,"Deng Tao",'M',27,177.6,"Hao San",'F',22,175.7,;
struct person *p;
struct person *q;
q=p=per;
for(;p<per+7;p++)
if(strcmp(p->name,(p+1)->name)>0)
*q=*(p+1);
*(p+1)=*p;
*p=*q;
printf("name=%-18s,sex=%3c,age=%4d,height=%7.2f\n",p->name,p->sex,p->age,p->height);
只要改一点点就好了,写注释的地方就是改动的地方。
#include "stdafx.h"
#include "string"
void main()
struct person
char name[20];
char sex;
int age;
float height;
per[7]="Li Ping",'M',22,178.2,"Gao Ming",'F',23,171.5,"Zhao Er",'F',32,168.6,"Wang Ying",'F',20,158.9,"Zhang Xiao",'M',25,181.0,"Deng Tao",'M',27,177.6,"Hao San",'F',22,175.7,;
struct person *p;
struct person q; //这行,去了*
for (int i = 0; i < 7; i++) //这行,新加的
for(p = per; p < per+7; p++) //这行,加了p=per
if(strcmp(p->name,(p+1)->name)>0)
q=*(p+1); //这行,去了*
*(p+1)=*p;
*p=q; //这行,去了*
//下面这几行,最后循环一次输出排序的结果
for(p = per; p < per+7; p++)
printf("name=%-18s,sex=%3c,age=%4d,height=%7.2f\n",p->name,p->sex,p->age,p->height);
本回答被提问者采纳 参考技术B 结构体在C中属于复杂类型,不能用一个"="就把全部内容赋给另一个变量。所以对结构体数组排序时最好是另建一个结构体型指针数组(如改过的代码中的*这[7]),指针是简单变量,按要求对这个指针数组进行排序就简单了……////////////后是有改动的,自己看,可续问。
#include "stdio.h"//
#include "string.h"//
void main(void)//
struct person
char name[20];
char sex;
int age;
float height;
per[7]="Li Ping",'M',22,178.2,
"Gao Ming",'F',23,171.5,
"Zhao Er",'F',32,168.6,
"Wang Ying",'F',20,158.9,
"Zhang Xiao",'M',25,181.0,
"Deng Tao",'M',27,177.6,
"Hao San",'F',22,175.7,;
struct person *p[7],*q;/////////////////////////////
int i,j;
for(i=0;i<7;i++)
p[i]=&per[i];
q=per;
for(i=0;i<6;i++)
for(j=i+1;j<7;j++)
if(strcmp(p[i]->name,p[j]->name)>0)
q=p[i];
p[i]=p[j];
p[j]=q;
printf("name=%-18s,sex=%3c,age=%4d,height=%7.2f\n",p[i]->name,p[i]->sex,p[i]->age,p[i]->height);
C语言结构体的内存分配
以上是关于关于C语言的结构体中元素的筛选,排列顺序。的主要内容,如果未能解决你的问题,请参考以下文章