gpt4 book ai didi

c++ - 在类中使用 fstream getline() 函数

转载 作者:太空狗 更新时间:2023-10-29 20:29:30 24 4
gpt4 key购买 nike

我正在尝试将包含字典单词的文本文件的行加载到数组对象中。我想要一个数组来保存所有以“a”开头的单词,另一个以“b”开头的单词......用于字母表中的所有字母。

这是我为数组对象编写的类。

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

using namespace std;

class ArrayObj
{
private:

string *list;
int size;

public:


~ArrayObj(){ delete list;}

void loadArray(string fileName, string letter)
{
ifstream myFile;
string str = "";
myFile.open(fileName);

size = 0;

while(!myFile.eof())
{
myFile.getline(str, 100);

if (str.at(0) == letter.at(0))
size++;
}
size -= 1;

list = new string[size];

int i = 0;
while(!myFile.eof())
{
myFile.getline(str, 100);

if(str.at(0) == letter.at(0))
{
list[i] = str;
i++;
}
}

myFile.close();
}


};

我收到一条错误消息:

2   IntelliSense: no instance of overloaded function     "std::basic_ifstream<_Elem, _Traits>::getline [with _Elem=char, _Traits=std::char_traits<char>]" matches the argument list d:\champlain\spring 2012\algorithms and data structures\weeks 8-10\map2\arrayobj.h  39

我想这需要我重载 getline 函数,但我不太确定如何去做或为什么有必要这样做。

有什么建议吗?

最佳答案

处理 std::string 的流函数不是 istream 的成员函数,而是一个自由函数,它是这样使用的。 (成员函数版本处理char*)。

std::string str;
std::ifstream file("file.dat");
std::getline(file, str);

值得注意的是有更好更安全的方法来做你想做的事情:

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

//typedeffing is optional, I would give it a better name
//like vector_str or something more descriptive than ArrayObj
typedef std::vector<std::string> > ArrayObj

ArrayObj load_array(const std::string file_name, char letter)
{
std::ifstream file(file_name);
ArrayObj lines;
std::string str;

while(std::getline(file, str)){
if(str.at(0)==letter){
lines.push_back(str);
}
}
return lines;
}


int main(){
//loads lines from a file
ArrayObj awords=load_array("file.dat", 'a');
ArrayObj bwords=load_array("file.dat", 'b');
//ao.at(0); //access elements
}

不要重新发明轮子;结帐 vector 它们是标准的,将为您节省大量时间和痛苦。

最后尽量不要放入 using namespace std ,这有很多我不会讨论的原因;而是使用 std::作为 std 对象的前缀,例如 std::cout 或 std::string。

http://en.cppreference.com/w/cpp/container/vector http://en.cppreference.com/w/cpp/string/basic_string/getline http://en.cppreference.com/w/cpp/string

关于c++ - 在类中使用 fstream getline() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9711977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com