I'm solving a kata in codewars, where you have to delete the exclamation mark '!'
But, when using .erase(), it deletes the space also. I'm not understanding how it deletes three '!' in a row.
This is the string that gives me problem:
"Hi! Hello!"
Debugging, it goes:
"HiHello!"
It ate the space and ends up as:
"HiHello"
This one works, but I don't understand when debugging it why doesn't appear more:
"Hello World!!!"
Goes to:
"Hello World"
I don't understand why it doesn't appear as "Hello World!!" and "Hello World!"
I used .erase() previously for splitting strings. I understood that .erase(first,second), where first is the start of the string inclusive and second is the end exclusive, also .erase() is a member function of std::string.
--Bonus--
I tried using .erase(pos,pos) and works equally.
Here is my code:
#include <string>
std::string removeExclamationMarks(std::string str){
std::string remove{ "!" };
std::cerr << str << '\n';
size_t pos{};
while( (pos = str.find(remove)) != std::string::npos ){
std::cerr << pos << '\n';
str.erase(pos, pos + remove.length());
std::cerr << str << '\n';
}
std::cerr << "END\n";
return str;
}
This call of the method
eraseis incorrectThe second argument specifies the number of elements to be erased.
So you need to write instead
Pay attention to that if your compiler supports C++20 then you can write