使用boost :: lambda_来压缩字符串中的空格

时间:2009-07-23 10:09:11

标签: c++ stl boost-lambda

我使用boost :: lambda删除字符串中的后续空格,只留下一个空格。我试过这个程序。

#include <algorithm>
#include <iostream>
#include <string>
#include <boost/lambda/lambda.hpp>


int main()
{
    std::string s = "str     str st   st sss";
    //s.erase( std::unique(s.begin(), s.end(), (boost::lambda::_1 == ' ') && (boost::lambda::_2== ' ')), s.end()); ///< works
    s.erase( std::unique(s.begin(), s.end(), (boost::lambda::_1 == boost::lambda::_2== ' ')), s.end()); ///< does not work
    std::cout << s << std::endl;
    return 0;
}

注释行工作正常,但未注释的行没有。

怎么样

(boost::lambda::_1 == boost::lambda::_2== ' ') 

不同
(boost::lambda::_1 == ' ') && (boost::lambda::_2== ' '))

在上面的程序中。评论的那个也给了我一个警告,“警告C4805:'==':'bool'类型的不安全组合,并在操作中输入'const char'”

感谢。

1 个答案:

答案 0 :(得分:5)

在C和C ++中 a == b == x与(a == x)&amp;&amp; (b == x), 前者被解释为(a == b)== x, 比较a与b以及该比较的结果(true或false) 与x进行比较。在你的情况下,x是一个空格字符, 在使用ASCII的典型实现中,其代码等于32, 将它与布尔值进行比较,布尔值转换为0或1 总是假的。