我需要帮助调试我的代码。我尝试了很多东西,但我似乎无法从字符串中删除字符。
我也完全不了解std :: erase是如何工作的,我不确定你是否可以用它擦除字符。
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
char n;
cin >> s;
cin >> n;
for (int i = 0;i < s.length(); i++) {
s.erase (n[i]);
}
cout << s;
return 0;
}
编辑:很抱歉这么模糊。我认识到我试图从数组而不是预期的字符串中删除某些内容的问题。在张贴的答案的帮助下;更新的代码附在下面,按照我想要的方式工作。感谢您的回复!
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
char n;
cin >> s;
cin >> n;
for (int i = 0; i < s.length(); i++) {
while (s[i] == n) {
s.erase(i, i);
}
}
cout << s;
return 0;
}
答案 0 :(得分:3)
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string s = "Hello World!";
s.erase(std::remove(s.begin(), s.end(), 'l', s.end());
std::cout << s << std::endl;
return 0;
}
分为两个陈述:
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string s = "Hello World!";
auto it = std::remove(s.begin(), s.end(), 'l');
s.erase(it, s.end());
std::cout << s << std::endl;
return 0;
}
答案 1 :(得分:1)
如果您只想从字符串中删除一个字符,可以使用其方法find
来查找字符串中的字符。例如
auto pos = s.find( n );
if ( pos != std::string::npos ) s.erase( pos, 1 );
或者您可以通过以下方式使用循环
std::string::size_type pos = 0;
while ( pos < s.size() && s[pos] != n ) ++pos;
if ( pos != s.size() ) s.erase( pos, 1 );
如果要使用循环擦除字符串中出现的所有字符,可以编写
for ( std::string::size_type pos = 0; pos < s.size(); )
{
if ( s[pos] == n ) s.erase( pos, 1 );
else ++pos;
}
答案 2 :(得分:0)
如果您对正在尝试的内容进行了正确的描述,将会很有帮助。问题有点模糊,但我认为你试图从一个字符串中删除一个给定的字符,如果这是你想要做的,这是一个建立在你已经提供的基础上的工作示例。
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
char n ;
cin >> s;
cin >> n;
for (int i = 0; i < s.length(); i++) {
if (s[i] == n) {
s.erase(i, 1);
}
}
cout << s;
return 0;
}