我发现我在运用 char[] 处理字符串时经常出错,如:
1. 初始化的时候可以用menset(char*, int i, size) ,其中i=0即可。
2. 在对比两个字符串的时候,判断字符串是否相等的时候需要用 strcmp(const char*,const char*) ,而不能直接使用“==”。
#include<iostream>
#include<string>
using namespace std;
//编写简单学生班级管理程序
// 要求:
//1、数据成员:学号,姓名,性别,班级,专业
//2、函数成员:构造函数、析构函数、输入函数,输出(显示)函数
//3、学生人数不少于10人
//4、其他函数:查找、排序等。
class cstudent {
private:
char name[20];
char number[20];
char sex[8];
char classname[20];
char major[30];
public:
cstudent()
{
memset(name, 0, 20); memset(number, 0, 20);
memset(sex, 0, 8); memset(classname, 0, 20); memset(major, 0,30 );
}
cstudent(char n[], char num[], char s[], char cn[], char ma[])
{
memset(name, 0, 20); memset(number, 0, 20);
memset(sex, 0, 8); memset(classname, 0, 20); memset(major, 0, 30);
memcpy(name, n, strlen(n)); memcpy(number, num, strlen(num));
memcpy(sex, s, strlen(s)); memcpy(classname, cn, strlen(cn)); memcpy(major, ma, strlen(ma));
}
cstudent(cstudent &st)
{
memset(name, 0, 20); memset(number,0, 20);
memset(sex, 0,8); memset(classname,0,20); memset(major, 0,30);
memcpy(name, st.name, strlen(st.name)); memcpy(number, st.number, strlen(st.number));
memcpy(sex, st.sex, strlen(st.sex)); memcpy(classname, st.classname, strlen(st.classname)); memcpy(major, st.major, strlen(st.major));
}
~cstudent()
{
}
void cpy(cstudent st)
{
memset(name, 0, 20); memset(number, 0, 20);
memset(sex, 0, 8); memset(classname, 0, 20); memset(major, 0, 30);
memcpy(name, st.name, strlen(st.name)); memcpy(number, st.number, strlen(st.number));
memcpy(sex, st.sex, strlen(st.sex)); memcpy(classname, st.classname, strlen(st.classname)); memcpy(major, st.major, strlen(st.major));
}
void in()
{
cin >> name >> number >> sex >> classname >> major;
}
char* getname()
{
return name;
}
char* getnum()
{
return number;
}
char* getsex()
{
return sex;
}
char* getclasn()
{
return classname;
}
char* getmajor()
{
return major;
}
void show()
{
cout << "姓名: " << name << endl;
cout << "学号: " << number << endl;
cout << "性别: " << sex << endl;
cout << "班级: " << classname << endl;
cout << "专业: " << major << endl;
}
void shows()
{
cout << name << ends << number << ends << sex << ends << classname << ends << major << endl;
}
};
class cclass {
private:
int snum;
cstudent student[20];
public:
void create(int n)
{
snum = n;
cout << "请按照 姓名 学号 性别 班级 专业 的顺序输入学生信息" << endl;
for (int i = 0; i < snum; i++)
{
student[i].in();
}
}
cclass(int num = 0, cstudent stu[] = NULL)
{
snum = num;
for (int i = 0; i < num; i++)
{
student[i].cpy(stu[i]);
}
}
~cclass()
{
//delete[] student;
}
void add(int n, cstudent stu[])
{
for (int i = 0; i < n; i++)
{
student[i + snum].cpy(stu[i]);
}
snum += n;
}
void find(char n[], int x)
{
for (int i = 0; i < snum; i++)
{
if (x == 1)
{
if (strcmp(student[i].getname(),n)==0)
student[i].show();
}
if (x == 2)
{
if (strcmp(student[i].getnum(), n) == 0)
{
student[i].show();
}
}
if (x == 3)
{
if (strcmp(student[i].getsex(),n)==0)
student[i].show();
}
if (x == 4)
{
if (strcmp(student[i].getclasn(),n)==0)
student[i].show();
}
if (x == 5)
{
if (strcmp(student[i].getmajor(), n)==0)
student[i].show();
}
}
}
void arrange(int x)
{
for (int i = 0; i < snum; i++)
{
for (int j = i; j < snum; j++)
{
if (x == 1)
{
const char* s1 = student[i].getname(), *s2 = student[j].getname();
if (strcmp(s1, s2) > 0)
{
cstudent t(student[i]);
student[i].cpy(student[j]);
student[j].cpy(t);
}
}
if (x == 2)
{
const char* s1 = student[i].getnum(), *s2 = student[j].getnum();
if (strcmp(s1, s2) > 0)
{
cstudent t(student[i]);
student[i].cpy(student[j]);
student[j].cpy(t);
}
}
}
}
};
void show()
{
cout << "姓名 学号 性别 班级 专业" << endl;
for (int i = 0; i < snum; i++)
{
student[i].shows();
}
}
};
int main()
{
cout << "***************学生班级管理程序****************" << endl;
cout << "添加学生" << endl;
int n;
cout << "请输入添加学生个数" << endl;
cin >> n;
cclass cla;
cla.create(n);
cout << "1.查找学生" << endl;
cout << "2.排序" << endl;
cout << "0.退出" << endl;
int x = 0;
cin >> x;
if(x==1)
{
cout << "1.按照姓名查找" << endl;
cout << "2.按照学号查找" << endl;
cout << "3.按照性别查找" << endl;
cout << "4.按照班级查找" << endl;
cout << "5.按照专业查找" << endl;
int a = 0;
cin >> a;
char search[20];
cout << "请输入关键字" << endl;
cin >> search;
cla.find(search, a);
}
if(x==2)
{
cout << "1.按姓名排序" << endl;
cout << "2.按学号排序" << endl;
int a = 0;
cin >> a;
cla.arrange(a);
cla.show();
}
return 0;
}