C++ 擦除函数中需要澄清

Clarification needed in c++ erase function

本文关键字:擦除 函数 C++      更新时间:2023-10-16

所以在最近的编程竞赛中出现了这个问题。 我们在这个问题上有一个测试用例

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)

需要明确的是,第二个参数不是位置。它是要删除的字符数。