为我的自定义字符串类实现getline

时间:2019-02-05 01:13:52

标签: c++

我正在尝试为我的字符串类实现getline方法,该方法将从数据文件中获取行,直到到达分隔符为止。我的IDE给我一个错误,提示没有匹配功能。

我尝试将类型从ifstream切换到fstream或istream,而这并没有改变。

我的getline函数:

ifstream& getline(ifstream &is,myString& s,char& delim)
{
    char *c=new char[500];
    is.get(c,500);
     int i=0;
    while(c[i-1]!=delim)
    {
        is.get(c,500);
        s+=c;
    }
    delete[]c;
    return is;
}

我的主:

int main(int argc, char*argv[])
{
    myString str;



ifstream DataFile(NULL);
cout << "AFF: " << argv[1] << endl;
cout<<"AFF: "<<argv[2]<<endl;
DataFile.open(argv[1]);
if(!DataFile)
{
    cout<<"File not found"<<endl;
}
DataFile.getline(DataFile,str,',');


cout<<str<<endl;


}

我不能使用stl字符串类,我需要读入以或/ n分隔的文件。我正在构造此方法,以便可以解析数据文件并将信息放入向量中

1 个答案:

答案 0 :(得分:0)

getline不是std::ifstream的成员,所以不要在DataFile上调用它。

DataFile.getline(DataFile,str,',');

成为

getline(DataFile,str,',');

此外,传递对字符文字的引用不是一个好主意。不编译-尝试剥离const ness)

ifstream& getline(ifstream &is,myString& s,char& delim)

需要成为

ifstream& getline(ifstream &is,myString& s, const char & delim)

ifstream& getline(ifstream &is,myString& s, char delim)

因为传递对char的引用实际上并不会带来太大收益。

雷米·勒博(Remy Lebeau)在评论中指出,您真正想要做的是打开getline来使用...处理任何标准输入流

istream& getline(istream &is,myString& s, char delim)

这可以解决这个问题,但是请注意,在实施{{1时,会出现一些逻辑错误(将c[i-1]设置为零后立即{i会立即出现在我面前) }}可能会导致一两个问题。我建议使用chat with the Rubber Duck,并在询问之前使用your development environment's debugger清理其余部分。