用结构解决问题
描述
N只小白鼠(1 < N < 100),每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。帽子的颜色用“red”,“blue”等字符串来表示。不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。
输入
输入第一行为一个整数N,表示小白鼠的数目。
下面有N行,每行是一只白鼠的信息。第一个为不大于1000的正整数,表示白鼠的重量,;第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。
输出
按照白鼠的重量从大到小的顺序输出白鼠的帽子颜色。
在样例输入输出可以看出每一个小白鼠都有两个成员分别为体重和帽子颜色
#include<iostream>
using namespace std;
struct Wm //定义Wm为标识符
{char color[11];
int weight;}; //内含两个成员
int main(){
Wm *mouse,temp; //定义两个Wm类型变量
int N,i,j;
cin>>N;
mouse=new struct Wm[sizeof(struct Wm)*N]; //开辟空间定义一个数组
for(i=0;i<N;i++)
cin>>mouse[i].weight>>mouse[i].color;
for(i=1;i<N;i++) //冒泡排序
for(j=0;j<=N-i-1;j++)
if(mouse[j].weight<mouse[j+1].weight)
{ temp=mouse[j]; //另一个Wm变量使用
mouse[j]=mouse[j+1];
mouse[j+1]=temp;}
for(i=0;i<N;i++) //输出
cout<<mouse[i].color<<endl;;
delete []mouse; //释放空间
return 0;}
这里说明结构指针类型的访问方法,结构类型不能一次性赋值,指针也是如此;结构指针有两种访问方法
*( 指针).成员 或者 指针->成员
如
cin>>mouse[i].weight>>mouse[i]_>color;
动态存储new
一旦定义变量,编译时,系统 就会分配空间,而这些空间将不会再被利用,于是就有了动态存储。
一般形式;
申请开辟空间 ;指针变量= new 类型
释放空间 ; delete 指针变量
int *p1=new int(0) //动态分配一个整形单元并赋初始值
char*p2=NULL;
p2=new char; //动态分配一个字符型单元
......
delete p1; //释放空间
delete p2; //释放空间