week 4 C++ 结构体
4.1结构体基础
定义结构体Student,包含三个成员:姓名,学号(字符串),民族。然后定义一个结构体变量Stu,键盘输入Stu的三个成员值并打印输出。
#include<iostream>
using namespace std;
struct Student
{
char name[5];
char I[11];
char nation[2];
}; //注意“;”
int main()
{
struct Student Stu;
cin>>Stu.name;
cout<<Stu.name<<endl;
cin>>Stu.I;
cout<<Stu.I<<endl;
cin>>Stu.nation;
cout<<Stu.nation<<endl;
return 0;
}
4.2 结构体数组
先定义结构体Student(参见结构体基础内定义),再定义结构体数组变量Stus,Stus有三个元素,分别代表三个学生。按学号大小顺序输出者三个学生。
提示:学号是字符串类型,字符串比较大小可用strcmp函数
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
int main()
{
struct Student
{
char name[20];
char I[11];
char nation[10];
};
struct Student stu[3],temp;
for(int i=0;i<3;i++)
{
cin>>stu[i].name>>stu[i].I>>stu[i].nation;
}
for(int i=0;i<3;i++)
{
for(int j=i+1;j<4;j++)
{
if(strcmp(stu[i].I,stu[j].I)==1) //前者大于后者,函数结果大于0
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
for(int i=0;i<3;i++)
{
cout<<stu[i].name<<" "<<stu[i].I<<" "<<stu[i].nation<<endl;
}
return 0;
}
4.3 结构体查询
给定具有三个元素的结构体(Student)数组,键盘输入姓名,如果存在该学生,则输出该生学号,否则输出“不存在该姓名学生”.
三个学生信息:
张凌 1305030401 汉
李明 1305030411 汉
王立刚 1305030409 汉
#include<iostream>
#include<string.h>
#include<stdlib.h>
using namespace std;
int main()
{
struct Student
{
char name[15];
char I[11];
char nation[10];
};
struct Student stu[3];
strcpy(stu[0].name,"张凌");
strcpy(stu[1].name,"李明");
strcpy(stu[2].name,"王立刚");
strcpy(stu[0].I,"1305030401");
strcpy(stu[1].I,"1305030411");
strcpy(stu[2].I,"1305030409");
strcpy(stu[0].nation,"汉");
strcpy(stu[1].nation,"汉");
strcpy(stu[2].nation,"汉");
int flag=0;
char n[30];
cin>>n;
for(int i=0;i<3;i++)
{
if(strcmp(stu[i].name,n)==0)
{
flag=1;
cout<<stu[i].I<<endl;
}
}
if(flag==0)
{
cout<<"不存在该姓名学生"<<endl;
}
return 0;
}
4.4 结构体插入
给定三个元素的结构体(Student)数组,在定义一个结构体(Student)变量,键盘输入该变量信息,并把该变量插入到结构体数组的第二个位置。
给定的三个元素:
张凌 1305030401 汉
李明 1305030411 汉
王立刚 1305030409 汉
#include<iostream>
using namespace std;
int main()
{
struct student
{
char Name[20];
char No[11];
char Nation[10];
};
struct student Stus[4];
strcpy(Stus[0].Name,"张凌");
strcpy(Stus[2].Name,"李明");
strcpy(Stus[3].Name,"王立刚");
strcpy(Stus[0].No,"1305030401");
strcpy(Stus[2].No,"1305030411");
strcpy(Stus[3].No,"1305030409");
strcpy(Stus[0].Nation,"汉");
strcpy(Stus[2].Nation,"汉");
strcpy(Stus[3].Nation,"汉");
int i;
cin>>Stus[1].Name>>Stus[1].No>>Stus[1].Nation;
for(i=0;i<4;i++)
{
printf("%s %s %s\n"
,Stus[i].Name,Stus[i].No,Stus[i].Nation);
}
return 1;
}
4.5结构体删除
定义一个结构体People(两个成员:编号和年龄),给定具有五个元素的结构体数组,键盘输入一个数字1~5,删除相应的元素并输出剩余的四个元素。
五个给定的元素为:
1 34
2 23
3 25
4 28
5 31
#include<iostream>
using namespace std;
int main()
{
struct people
{
int No;
int age;
};
struct people Stus[5];
Stus[0].No=1;
Stus[1].No=2;
Stus[2].No=3;
Stus[3].No=4;
Stus[4].No=5;
Stus[0].age=34;
Stus[1].age=23;
Stus[2].age=25;
Stus[3].age=28;
Stus[4].age=31;
int i,j,m;
cin>>m;
for(i=0;i<5;i++)
{
if(m==i+1)
{
for(j=i;j<4;j++)
{
Stus[j]=Stus[j+1];
}
}
}
4.6 长度最小字符串 结构体****
从5个字符串中找出长度最小的字符串。
#include "stdio.h"
#include "string.h"
int main()
{
char s[5][100];
char * p;
int c[5];
int i,m,a=0;
for(i=0;i<5;i++)
{
scanf("%s",s[i]);
c[i]=strlen(s[i]);
}
m=c[0];
for(i=0;i<5;i++)
{
if(c[i]<m)
{
m=c[i];
a=i;
}
}
p=s[a];
printf("%s\n",p);
return 1;
}