所以我一直在玩代码而且我一直在寻找如何替换找到的行。我能够找到名称并将“new_gpa”添加到该部分,但它会在同一文件中输出最终结果,但不会替换原始分数和名称。
我怎样才能删除与gpa一起找到的原始行?并将新值存储到文件中。
cristian 2.1
rachel 3.0
名称搜索:cristian
新文件:
cristian 2.1
rachel 3.0
cristian 4.1
代码如下。
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <fstream>
#include <sstream>
#include <cstring>
using namespace std;
int main()
{
string name;
int offset;
string line;
ifstream read_file;
read_file.open("alpha.dat", std::ios_base::app);
cout << "Please enter your name: \n";
cin>> name;
if (read_file.is_open())
{
while(!read_file.eof())
{
getline(read_file,line);
if((offset = line.find(name)) != string::npos)
{
cout <<"the word has been found: \n";
//cout << line //example to display
//new code
istringstream iss ( line );
string thisname;
double gpa;
double new_gpa = 2.1;
if( iss >> thisname >> gpa)
{
if (thisname == name)
{
cout << name <<endl;
cout << gpa <<endl;
ofstream myfile;
myfile.open("alpha.dat",std::ios_base::app);
myfile << " \n" << name << " " << gpa+ new_gpa;
myfile.close();
read_file.close();
}
}
}
}
}
return 0;
}
答案 0 :(得分:1)
使用std::ios_base::app
打开文件,这意味着所有输出操作都在文件末尾执行,并将内容附加到当前文件。但您要做的是修改原始位置的数据。因此,您应该使用std::ios_base::in
打开文件,功能seekp
可以在下一步帮助您。