Как уже упоминалось, код от KarlPhilip является хорошей отправной точкой (спасибо), но не работает должным образом в соответствии с "> = 0".По сравнению с «0» он известен для MS CString-types и в C # и т. Д., Но, похоже, не работает должным образом с STL.Например, в VS 2010 (только выпуск) код C ++ при этом сравнении работал неправильно, не выдавая ошибки!
Вот исправление стандартов C ++: если в некоторых мастерах есть улучшения, пожалуйста, опубликуйте их.Я думаю, это очень полезный и важный вопрос / фрагмент.
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main()
{
string search_string = "cactus";
string replace_string = "oranges";
string inbuf;
// Todo: Check, if input_file exists before.
// Todo: Try/catch or check, if you have write access to the output file.
fstream input_file("demo.txt", ios::in);
ofstream output_file("result.txt");
while (!input_file.eof())
{
getline(input_file, inbuf);
size_t foundpos = inbuf.find(search_string);
if(foundpos != std::string::npos)
{
string tmpstring = inbuf.substr(0,spot);
tmpstring += replace_string;
tmpstring += inbuf.substr(spot+search_string.length(), inbuf.length());
inbuf = tmpstring;
}
output_file << inbuf << endl;
}
//TODO: delete demo.txt and rename result.txt to demo.txt
// to achieve the REPLACE effect.
}
Я использовал следующую заменяющую часть внутри «если» из другого вопроса SO (код выше заменяет только первое вхождение):
if(foundpos != std::string::npos)
replaceAll(inbuf, search_string, replace_string);
///2625749/zamenit-chast-stroki-drugoi-strokoi
//
void replaceAll(std::string& str, const std::string& from, const std::string& to)
{
size_t start_pos = 0;
while((start_pos = str.find(from, start_pos)) != std::string::npos)
{
size_t end_pos = start_pos + from.length();
str.replace(start_pos, end_pos, to);
start_pos += to.length(); // In case 'to' contains 'from', like replacing 'x' with 'yx'
}
}