#c
#c
Вопрос:
Как я могу найти несколько вхождений строки внутри строки? И заменять найденную строку другой строкой во всех вхождениях? Допустим, у меня есть строка ниже:
"A cat is going. It is black-white stripped."
Я хочу заменить все вхождения «is» на are.
Комментарии:
1. Я надеюсь, что кошка просто «полосатая».
Ответ №1:
Вы можете использовать Boost::String. IIRC, для этого у них есть функция find_all / replace_all. Подробно здесь
#include <boost/algorithm/string.hpp>
#include <iostream>
int main()
{
std::string s = "A cat is going. It is black-white stripped.";
std::cout << boost::algorithm::replace_all_copy(s, "is", "are") << std::endl;
}
Ответ №2:
строка. replace()
это то, что вы хотите. Проверьте это здесь. Конечно, это придется запускать несколько раз, пока строка, которую вы хотите заменить, не вернется string::npos
в find()
. Попробуйте это:
int main(int argc, char *argv[]) {
if(argc != 3) {
cout << "Usage: <binary> <toFind> <toReplace>" << endl;
exit(1);
}
//string str(argv[1]);
string str = "A cat is going. It is black-white striped.";
string dest;
string toFind(argv[1]);
string toReplace(argv[2]);
cout << "Original string = " << str << endl;
while(str.find(argv[1]) != string::npos) {
size_t pos = str.find(argv[1]);
str.replace(pos, toFind.length(), toReplace, 0, toReplace.length());
}
cout << "Replaced string = " << str << endl;
return 0;
}
Конечно, существует множество проверок на ошибки, которые все еще необходимо включить в эту программу. Скажем, например:
- str жестко запрограммирован. Не очень хорошо.
- Проверки не выполняются, чтобы гарантировать, что длина строки, подлежащей замене, не больше, чем сама строка str.
HTH,
Sriram.