修剪空格/转换迭代器

时间:2011-10-09 03:39:28

标签: c++ string iterator compiler-errors

我想编写两个单行函数,它们会从字符串的左侧和右侧修剪空白区域。左边没问题:

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返回)转换为普通迭代器。怎么做?

3 个答案:

答案 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)