我正在尝试编写一个程序,它将:
- 打开 1.txt(其中包含我们需要查找的字符串)
- 将它们读入一个新的字符串数组,分离元素
- 打开 2.txt(其中包含我们要在其中查找要替换的字符串的文档)
- 读取行 -> 将输入字符串行文字与我们在 1.txt 中找到的所有元素进行比较
- 如果匹配,则替换有问题的字符串,将该行添加到 char 数组中 - 但是,如果匹配,同一行上可能还有另一个有问题的字符串,我该如何补偿?
- 否则,将该行添加到 char 数组 ()
- 将 char 数组写入新的输出文件(将包含原始文本 + 替换字符串)
本质上,就像在文本文档上按 CRTL + H 一样,替换字符串,但多次除外!(大约 70 个字符串要替换)
首先,这可能吗?如果是这样,您可以推荐的最佳方式是什么。
顺便说一句,我生成随机字符串作为替换,不用担心。
这是我到目前为止所拥有的:
.... CODE above here
ifstream instubFile;
ofstream outstubFile;
outstubFile.open("Temp.txt",ios::out);
instubFile.open("stub.txt",ios::in | ios::out);
instubFile.seekg(0, instubFile.end);
unsigned int m_uNumChars = instubFile.tellg();
instubFile.seekg(0,instubFile.beg);
string inBuf;
if (instubFile) // if it opened the file
{
// read each line, check for any string matches
// if string match, replace it, add line to output string
// else, add the line to output string
while(getline(instubFile,inBuf)) // read the line
{
cout << numberoflines << endl;
for (int i = 0; i < numberoflines ; i++) // compare chars in buffer with toreplace string
{
int m_iSize = inBuf.find(m_szToReplace[i]);
cout << m_iSize << endl;
if (m_iSize > 0)
{// found
inBuf.replace(m_iSize,m_szReplacement[i].length(),m_szReplacement[i]);
outstubFile << m_szReplacement[i] << endl;
}
}
}
}
else
{
cout << "Could not open stub.txt" << endl;
}
cout << inBuf << endl;
cin.get();
delete[] m_szReplacement;
delete[] m_szToReplace;
return 0;
}
/*
int spot = inBuf.find(m_szToReplace[i]);
if(spot >= 0)
{
string tmpstring = inBuf.substr(0,spot);
tmpstring += m_szReplacement[i];
tmpstring += inBuf.substr(spot+m_szToReplace[i].length(), inBuf.length());
inBuf = tmpstring;
}
*/
在检索行之前它工作正常,我不确定如何出去做(比较字符串)?