使用类、getline 和 stringstream 进行解析的 C++ 练习

标签 c++ parsing getline stringstream

我一直在努力弄清楚如何一起使用 getline 和 stringstream 来解析文件。如果有人可以帮助解释,我将不胜感激。极其。

我真的在尝试构建函数 ReadFile,该函数读取由 50 个姓名和薪水的“姓名、薪水”格式文本组成的文件名。我想将它分成名为:names[] salary[] 的数组。

目前我所拥有的如下,我认为根据提示我的类结构没问题,但是有人可以帮助我正确地将文件读入单独的数组吗?谢谢你!

class Players {

    public:
        //Initialize
        float salaries[50];
        string names[50];

        Players(){
            for (int i=0; i<50; i++) {
            float salaries[i]={-1.0};
            string names[i]= {""} ; }
        }

        void ReadFile(string filename) {
            ifstream file;
            file.open(filename);

            string line;
            int index=0;
            while (getline(file, line)) {
                stringstream ss(line);
                getline(ss, names[index], ',');
                getline(ss, salaries[index]);

                index ++
                string names;
                float salaries;

                ss >> names >> salaries >> ',';           
            }
        }

    float MaxSalary() {

    }

    string MaxSalaryName() {

    }
};

最佳答案

此代码不应编译。将来请确保您的代码示例无需修改即可编译,并包含所有#includes。

关于您的 ReadFile 的一些事情功能:

  • 您正在重新定义变量 namessalaries .你可能不希望这样。
  • index ++应该是 index++; .
  • ifstream::open接受一个 C 字符串,所以你需要传入 filename.c_str() .
  • 你的第一个getline很好,但是您的第二个尝试将字符串直接复制到 float 中。您需要明确地进行类型转换。一种方法是创建一个临时字符串变量,将其传递给 getline , 然后使用 std::stof将该字符串转换为 float 。这需要 C++11。如果你不能使用 C++11,你可以使用 strtof来自 <cstdilib> .
  • 不确定 ss >> ... 是什么旨在实现,但您可能不想要它。如果你想打印你的结果,你需要类似 cout << names[index] << ": " << salaries[index] << "\n"; 的东西

关于您的 Players() 的一些事情构造函数:

  • 您正在重新定义您的成员变量,因为您在变量名前包含了类型。删除类型。
  • 默认的字符串构造函数会创建一个空字符串,因此无需使用空字符串对其进行初始化。
  • 您可以安全地删除 {}围绕初始化值。

大多数这些问题都可以通过查看编译器错误然后查找相应的 C++ 文档来发现。也就是说,我知道 C++ 不是最容易入门的语言,它有助于尽早分配指针。坚持下去,你会成功的!

关于使用类、getline 和 stringstream 进行解析的 C++ 练习,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43335076/

相关文章:

c++ - 随机播放 QList 的部分内容

php - 如何使用 PHP Simple HTML DOM Parser 在 HTML 文件中找到最后一个 <div class>?

用变量值替换字符串中的变量名 [R]

c++ - C++ 中的 Getline 函数将第一个输入作为空字符。它应该这样做吗?

c++ - 在 C++ 中添加 boolean 表达式 switch 语句?

c++ - 如何在不出现此错误的情况下将 listnode 值设置为 Null?

c++ - 使用可变参数模板的递归元函数

json - 主干解析 json 响应

C++:将 ifstream 与 getline() 一起使用;

c++ - 在文本文件中搜索某个单词 C++