一个C++小问题 6

来源:百度知道 编辑:UC知道 时间:2024/06/08 00:48:38
#include<iostream.h>
#include<string.h>
#include<iomanip.h>

struct Student
{
char num[8];
char name[10];
short grade;
};

Student a[5]={{"ch231","wgm",69},{"ec115","lw",82},{"dt327","gm",72},{"cs102","zp",78},
{"bx214","zwy",65}};

void output(int n)
{
cout<<"Student"<<n<<"jilu:"<<endl;
cout.setf(ios::left);
for(int i=0;i<n;i++)
{
cout<<setw(8)<<a[i].num<<setw(12)<<a[i].name;
cout<<setw(5)<<a[i].grade<<endl;
}
cout<<endl;
}

void range(int n)
{
for(int i=1;i<n;i++)
{
Student d=a[i];
int j;
for(j=i;j>0 && strcmp(a[j-1].num,d.num)>0;j--)
a[j]=a[j-1];
a[j]=d;
}
}<

由于你的结构中有字符数组则在赋值时只是对数组指针地址赋值,而不是内容,在
a[i] = a[j-1];
中可以用
strcpy(a[i].num, a[j-1].num);
strcpy(a[i].name, a[j-1].name);
strcpy(a[i].grade, a[j-1].grade);
来代替。不过更快的做法是整个内存块拷贝,即:
const size = sizeof(a[0]);

memcpy(&a[i], &a[j-1], size);

你提的是什么问题?