如何检索一个尾巴std::string?
如果愿望成真,那就可以这样:
string tailString = sourceString.right(6);
Run Code Online (Sandbox Code Playgroud)
但这似乎太容易了,而且不起作用......
有什么好的解决方案?
可选问题:如何使用Boost字符串算法库?
添加:
即使原始字符串小于6个字符,该方法也应该保存.
Mat*_* M. 37
有一点值得注意:如果使用超出数组末尾的位置调用substr(优于大小),则out_of_range抛出异常.
因此:
std::string tail(std::string const& source, size_t const length) {
if (length >= source.size()) { return source; }
return source.substr(source.size() - length);
} // tail
Run Code Online (Sandbox Code Playgroud)
您可以将其用作:
std::string t = tail(source, 6);
Run Code Online (Sandbox Code Playgroud)
Cha*_*esB 15
使用substr()方法和size()字符串,只需获取它的最后一部分:
string tail = source.substr(source.size() - 6);
Run Code Online (Sandbox Code Playgroud)
对于处理小于尾部大小的字符串的情况,请参阅Benoit的答案(并且支持它,我不明白为什么我得到7个upvotes而Benoit提供更完整的答案!)
Ben*_*oit 11
你可以这样做:
std::string tailString = sourceString.substr((sourceString.length() >= 6 ? sourceString.length()-6 : 0), std::string::npos);
Run Code Online (Sandbox Code Playgroud)
请注意,这npos是默认参数,可能会被省略.如果您的字符串的大小超过6,则此例程将提取整个字符串.
这应该这样做:
string str("This is a test");
string sub = str.substr(std::max<int>(str.size()-6,0), str.size());
Run Code Online (Sandbox Code Playgroud)
甚至更短,因为subst的字符串结束为第二个参数的默认值:
string str("This is a test");
string sub = str.substr(std::max<int>(str.size()-6,0));
Run Code Online (Sandbox Code Playgroud)