我需要删除字符串中的指定位置
例如:
输入: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;
}
答案 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开始的余数。