0

我从 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;    
}

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

4

2 回答 2

1

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

于 2013-09-29T10:44:14.803 回答
0

问题是

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

  • 但即使您使用std::string::iterator, 使用当前逻辑,您也会尝试在erase调用 之后增加迭代器。(这样的迭代器无效)
    可能的解决方案:sir.begin()在每个erase.

下面是它的样子:

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,这些字符会丢失。你不能“恢复”它们。对于另一半,你必须采用更复杂的方法,但我会把它留给你 :)

于 2013-09-29T10:45:51.003 回答