删除字符串中的字符

时间:2013-03-27 07:24:56

标签: c++ string

我需要删除字符串中的指定位置

例如:

输入:4花

输出:Floer

我写了这段代码,但它给出了一个输出:Flo(即删除了剩下的单词) 我可以用什么其他功能而不是擦除来实现这个目标?

int main(){

    int num;
    int index = 1;
    string s;

    cin >> num >> s;
    s = s.erase(num-1);
    cout << index << " " << s << endl;

return 0;
}

4 个答案:

答案 0 :(得分:8)

尝试:

s.erase(num-1, 1);

您目前(有效)致电:

s.erase(num-1, npos);

(并删除s =位,因为无需重新分配s)。

答案 1 :(得分:1)

如果您是C ++世界的初学者,我建议您编写自己的函数来完成它!您可以随时使用标准函数和类。有人可能会说,为什么重新发明轮子,但它不是重新发明,而是学习发明意味着什么,轮子是什么,以及它是如何发明的。

编写我们自己的代码(特别是对于C-strings!)将给你非常好的编程经验,对语法有信心,而且最重要的是它会增强你的逻辑开发技能。

您的功能可能如下:

void RemoveCharacter(char* pString, char cCharToRemove);

现在,问题是:它会删除所有出现的相同字符,还是只删除第一个字符?如果没有出现给定角色怎么办? 这个函数应该返回一些东西,如果它删除了字符,还是删除了一个计数器?是否应采用另一个参数,即“删除所有事件”。

快乐的编码!

答案 2 :(得分:0)

这个怎么样?

std::string removeChar(std::string const& input, size_t pos) {
    return input.substr(0, pos-1) + input.substr(pos);
}

或者

std::string removeChar(std::string const& input, size_t pos) {
    return input.erase(pos-1, 1);
}

答案 3 :(得分:0)

试试吧 s.erase(num-1, 1),这就是你想要的。

std :: string :: erase的原型是

erase(size_t __pos = 0, size_t __n = npos)

如果未提供第二个参数,将使用默认值npos,并且将删除从__pos开始的余数。