2009-07-23 4 views
0

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; 
} 

주석 처리 된 행은 잘 작동하지만 주석 처리되지 않은 행은 올바르게 작동하지 않습니다.

어떻게 위의 progam에

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

에서

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

다르다. "C4805 경고 : '==': 'bool'유형과 'const char'유형의 안전하지 않은 혼합"

감사합니다.

C에서
+0

부스트 :: 정규식은 어떻습니까? '/ (\ s) +/$ 1'을 바꿉니 까? ;-) – Dario

답변

5

및 C++ == B 형 == x를 (A == X) & &보다 매우 다르다 (b == X) 는 전자는 (a ==의 b) == X로 해석 , a와 b를 비교하는 (true 또는 false) 과 x를 비교합니다. 귀하의 경우 x는 공백 문자 이고 ASCII를 사용하는 일반적인 구현에서는 해당 코드가 32와 같습니다. 은 0 또는 1로 변환되는 부울 값과 비교합니다. 은 항상 false를 제공합니다.

+0

바보. 네가 옳아. 감사 :) – navigator

관련 문제