我正在尝试替换文本文件中的字符串。类似于replace()函数。
这是代码:
#include <iostream>
#include <fstream>
#include <cstring>
Using namespace std;
int main()
{
fstream file("C:\\Users\\amir hossein\\Desktop\\Temp1\\test1.txt");
char *sub; sub = new char[20]; sub = "amir";
char *replace1; replace1 = new char[20]; replace1 = "reza";
char *buffer; buffer = new char[100];
int i, temp; streampos flag;
int c=0,mark;
bool flagforwrite=0;
if (file.is_open()){
while (!file.eof()) {
flag = file.tellg();
file.getline(buffer, 100); //We'll Search Sub inside of Buffer, if true, we'll replace it with Replace string
flagforwrite=0;
for (i=0;buffer[i];i++){
mark=i; c=0;
while (sub[c] && sub[c]== buffer[mark]){
c++; mark++;
}
if (!sub[c]){ //Make Changes in The Line
for (int j=i,count=0;count<strlen(replace1);j++,count++) buffer[j] = replace1[count]; //until here, we've replace1d the sub
flagforwrite=1;
}
}
if (flagforwrite){ //Write The line ( After Whole Changes In line have been made!!
file.seekp(flag);
file << buffer << "\n"; // ENDL here IS SUPER IMPORTANT!! IF you don't put it, I'll mess it up
if(file.bad()) cout << "Error\n";
}
}
}
else cout << "Error!!\n";
file.close();
delete[] sub;
delete[] replace1;
delete[] buffer;
return 0;
}
我想用“ reza”代替“ amir”。
我的文本文件包括4行:
嗨,我叫阿米尔,我朋友也叫阿米尔!
嗨,我叫阿米尔,我朋友也叫阿米尔!
嗨,我叫阿米尔,我朋友也叫阿米尔!
嗨,我叫阿米尔,我朋友也叫阿米尔!
当我运行程序时,我得到了。
嗨我的名字叫reza,我朋友的名字也叫reza!
嗨我的名字叫reza,我朋友的名字也叫reza!
嗨我的名字叫reza,我朋友的名字也叫reza!
嗨,我叫阿米尔,我朋友也叫阿米尔!
最后一行有什么问题?
我认为这个问题在这里:
if (flagforwrite){
file.seekp(flag);
file << buffer << "\n";
if(file.bad()) cout << "Error\n";
}
为什么标志总是指向该行?
我正在使用GNU GCC编译器。
最佳答案
我发现了问题!这是由eof()引起的!
所以我不是使用while(!file.eof())
而是使用while(file.getline(buffer,100))
并且我也将file.tellg()移到末尾,并定义了这样的行:streampos line=file.tellg();