You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历并打印C++自定义类返回对象的成员信息

问题解决:打印Person对象成员与模糊查找匹配

1. 打印Person对象的姓名、年龄等成员信息

如果你的Person类成员(比如name、age)是private权限,外部代码无法直接访问,最规范的做法是给类添加公共的getter方法,用于获取成员值。

修改Person类示例

#include <string>
#include <iostream>

class Person {
private:
    std::string name;
    int age;
public:
    // 构造函数
    Person(std::string n, int a) : name(n), age(a) {}

    // 获取姓名的getter方法
    std::string getName() const { return name; }
    // 获取年龄的getter方法
    int getAge() const { return age; }
};

找到对象后打印信息

假设findPerson返回的是Person指针(推荐用指针/引用,避免拷贝且能处理未找到的情况):

// 调用findPerson获取匹配对象
Person* foundPerson = list.findPerson("Vitalik");

// 先判断是否找到对象,再打印
if (foundPerson != nullptr) {
    std::cout << "姓名:" << foundPerson->getName() << std::endl;
    std::cout << "年龄:" << foundPerson->getAge() << std::endl;
} else {
    std::cout << "未找到匹配人员" << std::endl;
}

如果findPerson返回的是Person对象(需确保找到时才返回,否则会有默认构造问题),直接调用getter即可:

Person foundPerson = list.findPerson("Vitalik");
std::cout << "姓名:" << foundPerson.getName() << std::endl;
std::cout << "年龄:" << foundPerson.getAge() << std::endl;

2. 实现模糊查找匹配全名"Vitalik Buterin"

你的findPerson方法应该是在做精确字符串匹配,所以输入"Vitalik"无法匹配"Vitalik Buterin"。只需修改匹配逻辑,检查目标姓名是否包含输入的子串即可。

修改listOfPeople的findPerson方法

假设peopleList是存储Person的容器(比如std::vector<Person>):

#include <vector>
#include <string>

class listOfPeople {
private:
    std::vector<Person> peopleList;
public:
    // 添加人员到列表
    void addPerson(const Person& p) {
        peopleList.push_back(p);
    }

    // 模糊查找:返回第一个包含子串的Person指针
    Person* findPerson(const std::string& searchSubstr) {
        for (auto& person : peopleList) {
            // 检查姓名中是否包含目标子串
            if (person.getName().find(searchSubstr) != std::string::npos) {
                return &person;
            }
        }
        // 未找到返回空指针
        return nullptr;
    }
};

可选:忽略大小写的模糊匹配

如果需要不区分大小写(比如输入"vitalik"也能匹配),可以添加字符串转小写的辅助逻辑:

#include <algorithm>
#include <cctype>

// 辅助函数:将字符串转为全小写
std::string toLower(std::string str) {
    std::transform(str.begin(), str.end(), str.begin(),
                   [](unsigned char c){ return std::tolower(c); });
    return str;
}

// 修改findPerson为忽略大小写的模糊匹配
Person* listOfPeople::findPerson(const std::string& searchSubstr) {
    std::string lowerSubstr = toLower(searchSubstr);
    for (auto& person : peopleList) {
        std::string lowerName = toLower(person.getName());
        if (lowerName.find(lowerSubstr) != std::string::npos) {
            return &person;
        }
    }
    return nullptr;
}

内容的提问来源于stack exchange,提问作者ThisIsMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:30:53