【问题标题】:Clarification needed in c++ erase functionc ++擦除功能需要澄清
【发布时间】:2020-10-13 19:31:40
【问题描述】:

所以最近programming contest有这个问题。 我们在那个问题中有一个测试用例

8
11001101

现在我想要的输出是 1 但是这一行

cout << s.erase(0,6) << "\n" 

即使我想从 0 到第 6 个索引位置删除元素,也会给出 01。 我应该如何删除从 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;
}

【问题讨论】:

  • 你认为“0到6(包括6)”有多少个元素?您是否尝试过使用代码,例如传递不同的参数以查看会发生什么?另外,我在代码中没有看到对erase 的任何调用。
  • 7 个元素,我想删除所有 7 个,但该函数只删除 6 个:/

标签: c++ string stl


【解决方案1】:

查看std::string::erase 的一些文档。有一个重载需要删除起始 indexcount 个字符。如果你想删除前 7 个字符,那么你应该这样做:

s.erase(0, 7)

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

【讨论】:

  • 但是其他测试用例失败了:/
  • 我刚刚删除了我的ans,我得到了范围版本。序列版就是他用的。
  • @AbhijeetSrivastava 您需要自己弄清楚为什么其他测试用例会失败! :) 他刚刚回答了你关于erase的问题。
  • @AbhijeetSrivastava 抱歉,我不知道您的其余代码是否正确。我只是在回答你关于erase 工作原理的问题。
  • 好的,使用上面的测试用例,你能告诉我 s.erase(index_l , index_r) 的输出是什么吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 2015-12-20
  • 2011-11-09
  • 2012-07-18
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2011-08-23
相关资源
最近更新 更多