Как удалить определённый символ из строки?
Пример: есть строка s1 = "balboon" и строка s2 = "bon". нужно пройтись циклом и найти все буквы s2 и удалить их из s1 и s2. Чтобы на выводе у нас получилось: albo - "пустая строка" == std::cout << str1<< " - "<< str2 << '\n';
Есть пример кода который я написал и пытался разными способами менять, но без успешно
s1 = "balboon";
s2 = "bon";
std::string str1 = s1;
std::string str2 = s2;
for (int i = 0; i < s2.length() ; i++)
{
char two = s2[i];
size_t found2 = s2.find(two);
for(int j = 0; j < s1.length() ; j++)
{
char one = s1[j];
size_t found1 = s1.find(one);
if(s2[i] == s1[j])
{
str1.erase(found1, 1);
str2.erase(found2, 1);
}
}
}
std::cout << str1<< " - "<< str2 << '\n';
Ответы (1 шт):
Тут еcть несколько проблем.
У
s1иs2должны быть заданы типы данных (т.е.string).В цикле вы ориентируетесь на длину строки
s1(илиs2), а удаляете символы из другой (str1 и str2), следствие - выход за пределы массива.Не ясна суть задачи: если удалить все вхождения символов строки 2 в строку 1, то вы получите результат
alа неalbo, как в примере. Если только первое вхождение, то условие в цикле вообще неверно. Итого: для случая когда нужно удалить все вхождения символов:int main() { const std::string s1 = "balboon"; const std::string s2 = "bon"; std::string str1 = s1; std::string str2 = s2; while(str2.length() > 0) { for (int j = 0; j < str1.length(); j++) { if (str2[0] == str1[j]) { str1.erase(j, 1); j--; } } str2.erase(0, 1); } std::cout <<s1.c_str() <<" - "<< s2.c_str() <<" = "<< str1.c_str() << '\n'; }
Для второго случая: замените строку j--; на break;
Для ситуации, описанной в коментариях:
for(int i = 0;i<str2.length();i++)
{
bool isDel = false;
for (int j = 0; j < str1.length(); j++)
{
if (str2[i] == str1[j])
{
str1.erase(j, 1);
j--;
isDel = true;
}
}
if (isDel)
{
str2.erase(i, 1);
i--;
}
}