删除字符在C++中形成字符串

Delete characters form a string in C++

本文关键字:字符串 C++ 字符 删除      更新时间:2023-10-16

我从C++开始,我有一个简单的任务。正如标题所说,我想从字符串中删除第一个和最后一个字符 x 次(其中 x 是字符串的长度)。例如,如果字符串是"example",则结果将是:
example
xampl
amp
m
amp
xampl
example

到目前为止,我是这样想的:

#include <iostream>
#include <string>
string sir = "Example";
int len, i;
len = sir.length();
for(i=1; i<=len; i++)
{
    sir.erase(sir.begin(), sir.end());
    cout<<sir;    
}

或者类似的东西...有人可以帮助我吗?

您要同时删除第一个和最后一个字符。但在示例中,您还在每个步骤中添加了它们。实际上并不清楚你想要什么。无论您要删除或添加什么字符,都可以保持字符串不变。所以你应该使用 substr。在这里查看。

问题是

  • 不能使用std::string::erase整数索引,如int i
    您需要使用std::string::iterator

  • 但即使你使用 std::string::iterator ,使用当前的逻辑,你也会尝试在调用erase后增加迭代器。(此类迭代器无效)
    可能的解决方案:在每次erase后将sir.begin()分配给迭代器。

下面是它的外观:

std::string sir = "Example";
for(string::iterator i = sir.begin(); i != sir.end(); i = sir.begin())
{
    sir.erase(i);
    std::cout << sir << std::endl;
}

输出:

xample
ample
mple
ple
le
e

请注意,从std::string中删除字符后,这些字符将丢失。您无法"恢复"它们。对于另一半,你必须采用更复杂的方法,但我会把它留给你:)