大家好,我有个将用户姓名排序的问题,姓名包含中英文,我定义了一个简单的CUser类来记录用户的姓名和电话号码,如下:
//User.h
#pragma once
#include <string>
using namespace std;
class CUser
{
public:
CUser(void);
CUser(string name, string phoneNumber);
~CUser(void);
string Name;
string PhoneNumber;
};
//User.cpp
#include "User.h"
//默认构造函数,可以取消
CUser::CUser(void)
{
Name = "张三";
PhoneNumber = "12345678";
}
//通过构造函数传入参数,可直接复制形参,无需传址。用传入的值实例化一个对象
CUser::CUser(string name,string phoneNumber)
{
Name = name;
PhoneNumber = phoneNumber;
}
CUser::~CUser(void)
{
}
然后定义一个简单的CSorter类,在其构造函数传入一个用户数组,并完成排序过程,代码如下:
//Sorter.h
#pragma once
#include "User.h"
class CSorter
{
public:
CSorter(void);
//通过构造函数,传入第一个数组,由于数组一般较大,需要传址
CSorter(CUser Users[]);
~CSorter(void);
private:
//在这个类的内部将传入的的数组排序
void Sorter(CUser Users[]);
};
//Sorter.cpp
#include "Sorter.h"
CSorter::CSorter(void)
{
}
CSorter::CSorter(CUser Users[])
{
Sorter(Users);
}
CSorter::~CSorter(void)
{
}
void
CSorter::Sorter(CUser Users[])
{
//如果数组为空,则直接退出
if(Users == NULL) return;
//获得数组中包含有多少个元素
int count = sizeof(Users)/sizeof(Users[0]);
//通过冒泡法将用户数组排序
for (int i = 0;i < count - 1; i++)
{
for (int j = i + 1; j < count; j++)
{
//由于strcmp需要传入的是char*,故定义char类型,不需要传址。
//将string转换为char*,而不是const char*,故需要调用
int iLen = Users[i].Name.length();
char* name_i;
name_i =(char*)malloc((iLen+1)*sizeof(char));
Users[i].Name.copy(name_i,iLen,0);
//与第i个做相似处理
int jLen = Users[j].Name.length();
char* name_j;
name_j = (char*)malloc((jLen+1)*sizeof(char));
Users[j].Name.copy(name_j,jLen,0);
//判断两个字符串大小,如果前面的大,就交换两者的位置
if (strcmp(name_i,name_j)>0)
{
CUser tempuser;
tempuser = Users[i];
Users[i] = Users[j];
Users[j] = tempuser;
}
//由于使用了malloc,故需要将指针销毁,避免内存泄露
delete name_i;
delete name_j;
}
}
}
然后,在Main函数中,应用一个用户数组,将用户数组传给Sorter类,代码如下:
int main()
{
//定义一用户数组,并实例化
CUser Users[] =
{
CUser(), //默认值
CUser("Jack", "010-62780936"),
CUser("Bond", "13324782134"),
CUser("李宁", "010-56428554"),
CUser("张飞", ""),
CUser("诸葛亮", "15844120725"),
CUser("阿卜杜拉", "0334-85612456"),
CUser("穆罕默德", "0411-52137841"),
CUser("Wang Qian", "5231-561435821")
};
//定义一Sort类,在构造函数中排序,传数组默认传入地址
CSorter sorter(Users);
//将结果再输出
}
但是结果没有发生变化啊,这个为啥啊?我的代码哪里有问题?请各位帮我看看啊。多谢了啊。