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

如何将从txt读取球队名存入vector的C++代码封装为类

问题核心错误点

  • getTeam() 声明与定义返回类型不匹配:类内声明为 vector<unsigned char> const&,和你实际需要返回的 vector<string> 类型冲突,同时函数定义漏写了参数括号
  • 缺少实际读取文件、解析球队名的执行逻辑,仅设置了文件名没有触发读取操作
  • 全局的字符串拆分函数可以封装到类内作为私有工具,避免全局污染

修正后的完整可运行代码

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

class TeamFileReader {
public:
    // 设置要读取的文件名
    void setFileName(string name) {
        fileName = name;
    }

    // 执行文件读取、解析逻辑,返回是否读取成功
    bool load() {
        ifstream readTeam(fileName);
        if (!readTeam) {
            cerr << "Error while opening the file.\n";
            return false;
        }
        teams.clear(); // 清空之前的旧数据
        string line;
        while (getline(readTeam, line)) {
            teams.push_back(processLine(line));
        }
        readTeam.close();
        return true;
    }

    // 返回存储球队名的vector,对外只读
    const vector<string>& getTeams() const {
        return teams;
    }

private:
    string fileName;
    vector<string> teams;

    // 类内私有工具函数,拆分球队名
    string processLine(const string& s) const {
        string::size_type pos = s.find('-');
        if (pos != string::npos) {
            return s.substr(0, pos);
        }
        return s;
    }
};


int main() {
    TeamFileReader pullTeams;
    pullTeams.setFileName("teams.txt");
    // 读取文件
    if (pullTeams.load()) {
        // 打印结果
        int g = 1;
        for (const auto& team : pullTeams.getTeams()) {
            cout << g << " " << team << endl;
            g++;
        }
    }
    return 0;
}

主要改动说明

  1. 统一了getTeams()的声明定义,返回类型为const vector<string>&,符合存储球队名的类型需求
  2. 新增load()方法,将原本写在main里的文件读取、解析逻辑封装到类内部,调用该方法即可完成数据加载
  3. 将teams存储容器和字符串拆分函数改为私有成员,符合封装原则,避免外部意外修改内部数据
  4. 增加读取结果返回值,方便上层判断是否读取成功

内容的提问来源于stack exchange,提问作者Tim's

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:06:03