// search and replace a word in a text file
#include<iostream>
#include<fstream>
#include<string>
#include<sstream>
void replaceInString(std::string& s, std::string needle, std::string replace) {
int m = needle.length();
int n = s.length();
for(int i = 0; i < n; i++) {
if (s.substr(i, m) == needle) {
s.replace(i, m, replace, 0, replace.length());
}
}
}
int main(int argc, char** argv) {
using namespace std;
if (argc < 4) {
cout << "need a filename, a word and its replacement on cmd line" << endl;
return 1;
}
ifstream ifs(argv[1]);
if (!ifs) {
cout << "cannot open file " << argv[1] << endl;
return 2;
}
string s;
char c;
while(!ifs.eof()) {
ifs.get(c);
if (c == ' ' || c == '\n') {
cout << c;
} else {
ifs.putback(c);
}
ifs >> s;
if (ifs.eof()) {
break;
}
if (s == argv[2]) {
cout << argv[3];
} else {
replaceInString(s, argv[2], argv[3]);
cout << s;
}
}
cout << endl;
ifs.close();
return 0;
}