我有一个程序试图按字母顺序对某些名称进行排序。我运行它并没有任何错误,但名称没有排序。我比较了两个名字,看看哪一个应该在数组中移位。
以下是代码:
void sort_names(char array[])
{
const int arraysize = 5;
// Step through each element of the array
for (int startindex = 0; startindex < arraysize; startindex++)
{
int smallestnum = startindex;
for (int currentindex = startindex + 1; currentindex < arraysize; currentindex++)
{
// If the current element is smaller than our previously found smallest
if ((student_list[currentindex].lname) < (student_list[smallestnum].lname))
// Store the index
smallestnum = currentindex;
}
// Swap our start element with our smallest element
swap(student_list[startindex], student_list[smallestnum]);
}
}
我的结构看起来像这样:
struct student {
char fname[30];
char lname[30];
};
我是否必须将这些转换为字符串,因为它们是字符数组?我有点迷失,并试图弄清楚如何正确排序。
答案 0 :(得分:1)
问题在于这一行:
if ((student_list[currentindex].lname) < (student_list[smallestnum].lname))
它不比较字符串字符,而是比较内存地址。
如果您仍想使用char
数组,则必须使用strcmp
函数。但是,我建议你改用string
。
答案 1 :(得分:0)
问题在于这一行:
if ((student_list[currentindex].lname) < (student_list[smallestnum].lname))
该行比较指针,它不比较内容。
应该是:
if ( strcmp( student_list[currentindex].lname, student_list[smallestnum].lname ) < 0 )
另一种选择是使用std :: string,它具有内置的比较。例如:
struct student {
std::string fname;
std::string lname;
};