0

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

例如:

输入:4 花

输出:弗洛尔

我写了这段代码,但它给出了一个输出: 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

4 回答 4

8

尝试:

s.erase(num-1, 1);

您目前(有效地)致电:

s.erase(num-1, npos);

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

于 2013-03-27T07:27:04.643 回答
1

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

编写我们自己的代码(特别是 C 字符串!)会给你很好的编程经验,会给语法带来信心,最重要的是它会提高你的逻辑开发技能。

你的功能可能是这样的:

void RemoveCharacter(char* pString, char cCharToRemove);

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

快乐编码!

于 2013-03-27T07:35:54.597 回答
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);
}
于 2013-03-27T07:27:52.807 回答
0

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

std::string::erase 的原型是

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

如果没有提供第二个参数,npos将使用默认值并删除从 __pos 开始的剩余部分。

于 2013-03-27T07:55:39.233 回答