我使用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'”
感谢。
答案 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 总是假的。