c ++按字母顺序排序名称

时间:2011-09-16 00:20:33

标签: c++ string sorting

我有一个程序试图按字母顺序对某些名称进行排序。我运行它并没有任何错误,但名称没有排序。我比较了两个名字,看看哪一个应该在数组中移位。

以下是代码:

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];
};

我是否必须将这些转换为字符串,因为它们是字符数组?我有点迷失,并试图弄清楚如何正确排序。

2 个答案:

答案 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;
};