【问题标题】:Alternatives to using fstream使用 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 的循环是当我试图做一些我应该删除它的时候。它在哪些方面被破坏?反向字符串似乎成功地反转了传入的字符串,而不是从文件中读取的字符串。这些行在反转之前也成功存储在“存储”中。它符合要求,只是没有按预期处理字符串。

标签: c++ string fstream


【解决方案1】:

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

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

用这个:

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

【讨论】:

  • 谢谢!起初我正在使用它,但我认为这是导致问题的原因,所以我编写了自己的但我现在修复了它,它不是让我悲伤的反向功能
猜你喜欢
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
相关资源
最近更新 更多