我一直在努力弄清楚如何一起使用 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
的一些事情功能:
- 您正在重新定义变量
names
和salaries
.你可能不希望这样。 -
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/