我想编写两个单行函数,它们会从字符串的左侧和右侧修剪空白区域。左边没问题:
void trimLeft(string &s) {
s.erase(s.begin(), find_if(s.begin(), s.end(), (int (*)(int))isgraph));
}
但是当我为右侧尝试类似的东西时:
void trimRight(string &s) {
s.erase(find_if(s.rbegin(), s.rend(), (int (*)(int))isgraph), s.end());
}
我遇到了一些编译错误。问题是我必须将reverse_iterator(由find_if返回)转换为普通迭代器。怎么做?
答案 0 :(得分:2)
您可以使用base()
成员函数从其reverse_iterator恢复底层迭代器。
void trimRight(string &s) {
s.erase(find_if(s.rbegin(), s.rend(), (int (*)(int))isgraph).base(), s.end());
}
答案 1 :(得分:1)
查看文档,看起来string :: erase应该正好使用reverse_iterators。问题是你正在混合反向和前向迭代器。所以试试
void trimRight(string &s) {
s.erase(s.rbegin(), find_if(s.rbegin(), s.rend(), (int (*)(int))isgraph));
}
编辑:不。
答案 2 :(得分:0)