子串本身

时间:2015-10-26 13:32:31

标签: c++ string exception substring

写作时

string mystring("blabbing;hyfcvfddffc");
// mystring can be modified during application process
int tokemFrom = mystring.find(';');
mystring = mystring.substr((tokenFrom + 1));

我了解到,当我的字符串为空,或者找不到;时,这种语法可能不安全,从而引发异常。我重写了代码避免这个问题:

string mystring("blabbing;hyfcvfddffc");
// mystring can be modified during application process
int tokenFrom = mystring.find(';');
string temp = mystring.substr((tokenFrom + 1));
mystring = temp;

有没有更简单的方法来确保我的代码安全?

1 个答案:

答案 0 :(得分:3)

如果你想在;之后删除字符串中的所有内容,那么你可以使用std::string::erase而不是分配给它自己的子字符串。

std::string::size_type pos;
std::string foo("blabbing;hyfcvfddffc");
pos = foo.find(";");
foo.erase(pos == std::string::npos ? foo.size() : pos);

Live Example

所以我们得到;的位置,然后在erase中,位置等于std::string::npos,表示找不到它然后我们告诉擦除从头开始擦除字符串什么也不做。否则,它将从;的位置擦除。