, если вы хотите удалить все те же подстроки из исходной строки. Это может сработать.
while(str2.find(str) != std::string::npos) {
str2.erase(str2.find(str), str2.size());//here
}
return str2;//you shouldn't return string, it's not your return type.
str.erase (pos,length); //your choice
//if str="abcdefg"
str.erase(3,2);
//str="abcfg"
или
str.erase (first,last);
//if str="abcdefg"
str.erase(str.begin()+3,str.begin()+5);
//str="abcfg"
если str2 является подстрокой str, "str.find (str2);" вернет первую позицию, где он впервые появился.
str="Thank you";
str2="you";
str.find(str2);//return 6
так
str2.erase(str.find(str), str2.size());
должно быть
str2.erase(str2.find(str), str2.size());
Надеюсь, это поможет.