使用 fstream 的替代方案

Posted

技术标签:

【中文标题】使用 fstream 的替代方案【英文标题】:Alternatives to using fstream 【发布时间】:2016-11-19 16:52:23 【问题描述】:

我正在尝试使用 c++ 中的 fstream 从文本文件中读取多行二进制字符串。它目前可以正常工作,但无法正常操作字符串。从文件中读取字符串后,我需要反转字符串,这会导致空终止符位于错误的位置并导致各种错误。是否有任何替代“fstream”来将数据读取到字符串的方法,或者有什么方法可以反转从文件中读取的字符串,而不会弄乱空终止符。

这是我的代码的 sn-p:

void Baby::getStore(string fileName, string* store)
    fstream myFile;
    int i=0;
    myFile.open(fileName.c_str(), ios::out | ios::in);
    string currentLine;
    if(myFile.is_open())
        while(getline(myFile, currentLine))
            store[i] = Baby::reverseString(currentLine);
            for(int j=31; j>=0; j--)
                store[j]
            
            i++;
        
        myFile.close();
    else
        cout << "File not found\n";
    


//reverses the string it is given
string Baby::reverseString(string rev)
    string temp;
    for(int i=rev.size(); i>0; i--)
        temp += rev[i-1];
    
    return temp;

【问题讨论】:

也许阅读有关密钥const 并使用std::vectorstd::array 你的问题不是fstream。那是你的reverseString 函数坏了。这不是fstream 的错。还不清楚j 周围的内部循环应该做什么。总体而言,您的代码似乎普遍存在问题。 你写错了算法,跟 fstream 没有关系! @NicolBolas 对不起,围绕 j 的循环是当我试图做一些我应该删除它的时候。它在哪些方面被破坏?反向字符串似乎成功地反转了传入的字符串,而不是从文件中读取的字符串。这些行在反转之前也成功存储在“存储”中。它符合要求,只是没有按预期处理字符串。 【参考方案1】:

另一种在不弄乱空终止符的情况下反转字符串的方法是std::reverse() 函数。包含算法头文件并替换此:

store[i] = Baby::reverseString(currentLine);

用这个:

std::reverse(currentLine.begin(),currentLine.end());
store[i] = currentLine;

【讨论】:

谢谢!起初我正在使用它,但我认为这是导致问题的原因,所以我编写了自己的但我现在修复了它,它不是让我悲伤的反向功能

以上是关于使用 fstream 的替代方案的主要内容,如果未能解决你的问题,请参考以下文章

c++使用文件流fstream换行符的保存,该如何解决

fstream::tellg() 和 ::seekg() 的问题

fstream指针

C++(八):fstream读写操作

fstream.h是啥意思?又啥作用啊?

c++程序中,iostream可以被fstream代替吗