如何使用string :: erase(它添加垃圾)

时间:2014-11-25 14:11:18

标签: c++ string stl

我希望有人能够帮助我。

我有一些代码,我有一个字符串变量数据。数据总是包含这样的内容:"' 401454654"。它总是一个'后面有一个数字。我想删除'在前面。数据也是空字符串也是可能的。我目前的解决方案如下:

string data = /* ... */;
if(!data.empty())
    data.erase(data.begin());
else
    cout << "Error in line ...." << endl;

有趣的是,我总是只使用数字或空字符串获得正确的字符串。但有时我会得到一些奇怪的角色加上原来的&#39; 401454654。我真的不知道,原因是什么。

在Windows和Linux上测试了g ++ 4.6和g ++ 4.9 linaro。总是完全相同的结果。我希望有人可以给我一个建议。

2 个答案:

答案 0 :(得分:0)

对不起,迟到了。我自己解决了。我实际上不知道我在gist上传的实现中的错误,但是我以更好的方式第二次实现它(对于第一个我只有几分钟的时间来实现它)。谢谢你的帮助。

答案 1 :(得分:-1)

您可能会看到此错误:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60278

有趣的是,我能够在gcc 4.8.1中编译它:

data.erase(data.begin());

如果是错误,你可以实现它在幕后所做的代码:

copy(next(data.begin()), data.end(), data.begin());
data.pop_back();