如何比较结构中的两个字符串



我有一个学校项目,我需要为用户提供按数字或字母顺序对两个学生进行排序的选项。我已经设法完成了第一个(数字顺序(,但我无法理解如何按字母顺序对它们进行排序。

学生的姓名由用户提供,并存储在结构中。当我尝试使用时:

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name) < 0));

我收到错误"布尔"类型的参数与"const char*"类型的参数不兼容。

这是结构

typedef struct
{
int number;
char name[10];
char surname[10];
}num_nom_surname;
num_nom_surname *number_name_surname;

这是按字母顺序排列的

if(number_name_surname[0].number > number_name_surname[1].number)
{ 
for (i = number_of_students - 1; i >= 0; i--)
{
printf("n Student N%c %5d - ", 167, number_name_surname[i].number);
printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
}
}   
else
{
for (i = 0; i < number_of_students; i++)
{
printf("n Student N%c %5d - ", 167, number_name_surname[i].number);
printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
}
}

这就是我需要帮助的那个

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name) < 0));
{
}

//编辑//

所以现在我已经做到了,我还有另一个问题。 为了按字母顺序打印姓名,我需要确保名字不同。 例:

如果第一个名字是:马克·阿黛尔,第二个名字是:马克男孩,我该如何按顺序打印它们?

这是代码:

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name)) < 0) 
{
for (i = 0; i < number_of_students; i++)
{
printf("n Student N%c %5d - ", 167, number_name_surname[i].number);
printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
}
}
else 
{
for (i = number_of_students - 1; i >= 0; i--)
{
printf("n Student N%c %5d - ", 167, number_name_surname[i].number);
printf("Name: %s %s", number_name_surname[i].name, number_name_surname[i].surname);
}
}
printf("n Value of strcmp: %d", strcmp((number_name_surname[0].name), (number_name_surname[1].name)));

你的括号是去掉的,你有

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name) < 0))

但你需要;

if (strcmp((number_name_surname[0].name), (number_name_surname[1].name)) < 0)

如有疑问,请简化。

char* name1 = number_name_surname[0].name;
char* name2 = number_name_surname[1].name;
int res = strcmp(name1, name2);
if (res < 0)
{
...
}

最新更新