所以在最近的编程竞赛中出现了这个问题。 我们在这个问题上有一个测试用例
8
11001101
现在我想要的输出是 1,但这行
cout << s.erase(0,6) << "n"
给出 01,即使我想删除从 0 到第 6 个索引位置的元素。 我应该如何删除从 0 到 6(包括 6(的元素
这是供参考的代码
#include <vector>
#include <iostream>
using namespace std;
int main(){
int t; cin >> t;
while(t--){
long n; cin >> n;
string s; cin >> s;
int index_l=0;
int index_r=0;
for(int i=0;i<n;i++){
if(s[i]=='1'){
index_l = i;
break;
}
}
for(int i=s.length(); i > index_l;i--){
if(s[i] == '0'){
index_r = i;
break;
}
}/*
cout << s.length() << "n";
cout << index_l << " " << index_r << "n";
*/
if(index_r == 0) cout << s << "n";
else cout << s.replace(index_l,index_r,"0");
}
return 0;
}
查看一些文档以了解std::string::erase
。有一个重载需要起始索引和要删除的字符计数。如果要删除前7个字符,则应执行以下操作:
s.erase(0, 7)
需要明确的是,第二个参数不是位置。它是要删除的字符数。