Чтение текстового файла и выходной строки

Ниже у меня есть код, который читает текстовый файл и записывает строку в другой текстовый файл, только если у него есть слово "unique_chars" в этом. У меня также есть другой мусор в этой строке, такой как, например. "column" Как я могу сделать это заменить фразу "column" с чем-то еще, таким как "wall"?

Так что моя линия будет как <column name="unique_chars">x22k7c67</column>

#include <iostream>
#include <fstream>

using namespace std;

int main()
{

ifstream  stream1("source2.txt");
string line ;
ofstream stream2("target2.txt");

while( std::getline( stream1, line ) )
{
if(line.find("unique_chars") != string::npos){
stream2 << line << endl;
cout << line << endl;
}

}stream1.close();
stream2.close();

return 0;
}

1

Решение

Для подстановки вы можете использовать метод std :: string «replace», для этого требуются начальная и конечная позиции и строка / токен, который заменит то, что вы удаляете, следующим образом:

(Также вы забыли включить заголовок строки в свой код)

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main()
{
ifstream  stream1("source2.txt");
string line;
ofstream stream2("target2.txt");

while(getline( stream1, line ))
{
if(line.find("unique_chars") != string::npos)
{
string token("column ");
string newToken("wall ");
int pos = line.find(token);

line = line.replace(pos, pos + token.length(), newToken);
stream2 << line << endl;
cout << line << endl;
}
}

stream1.close();
stream2.close();

system("pause");
return 0;
}
1

Другие решения

Если вы хотите заменить все вхождения строки, вы можете реализовать свою собственную функцию replaceAll.

void replaceAll(std::string& str, const std::string& from, const std::string& to) {
if(from.empty())
return;
size_t pos = 0;
while((pos = str.find(from, pos)) != std::string::npos) {
str.replace(pos, from.length(), to);
pos += to.length();
}
}
2

По вопросам рекламы [email protected]