结构体字符串统计排序
时间: 2025-05-30 16:08:26 浏览: 9
### 对C/C++结构体中的字符串成员进行统计与排序
#### 定义结构体并初始化数据
为了实现对结构体中字符串成员的统计和排序,首先需要定义一个包含字符数组作为成员的结构体,并创建该结构体的一个数组实例。
```c++
#include <iostream>
#include <cstring>
struct Person {
char name[50];
};
int main() {
struct Person persons[] = {{"Alice"}, {"Bob"}, {"Charlie"}, {"David"}, {"Eve"}};
int n = sizeof(persons) / sizeof(persons[0]);
}
```
这段代码展示了如何声明`Person`类型的结构体以及初始化一组人员的名字[^1]。
#### 统计操作
对于统计而言,在此上下文中可以理解为计算特定条件下的记录数量。如果目标是对名字长度做简单统计,则可以通过遍历结构体数组来完成:
```c++
// 计算名字长度大于等于某个阈值的人数
int count_long_names(struct Person *arr, size_t length, int threshold) {
int counter = 0;
for (size_t i = 0; i < length; ++i) {
if (strlen(arr[i].name) >= static_cast<size_t>(threshold)) {
++counter;
}
}
return counter;
}
std::cout << "Number of people with names longer than or equal to 4 characters: "
<< count_long_names(persons, n, 4);
```
上述例子实现了基于给定阈值筛选出符合条件的对象数目统计功能。
#### 排序操作
要按照结构体内字符数组成员来进行排序,需编写自定义比较器用于传递给标准库提供的排序算法(如`qsort()`)。这里展示了一个完整的示例程序,它不仅完成了排序还打印出了排序后的结果。
```c++
#include <cstdio>
#include <cstdlib> // For qsort()
#include <cstring> // For strcmp()
// 自定义比较函数
static int compare_person_by_name(const void *a, const void *b) {
return strcmp(static_cast<const struct Person*>(a)->name,
static_cast<const struct Person*>(b)->name);
}
void sort_and_print_people(Person* arr, size_t num_elements){
qsort(arr, num_elements, sizeof(*arr), compare_person_by_name);
puts("Sorted list:");
for(size_t idx = 0 ;idx<num_elements;++idx){
printf("%s\n", arr[idx].name);
}
}
// 调用排序及输出方法
sort_and_print_people(persons,n);
```
通过这种方式,能够有效地利用`strcmp()`函数配合`qsort()`达到预期效果——即依据结构体内的字符串字段对整个集合实施升序排列[^2]。
阅读全文
相关推荐



















