2009-07-23 19 views
0

boost :: lambdaを使用して文字列内の後続の空白を削除します。空白は1つのみです。私はこのプログラムを試しました。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== ' ') 

上記progamで

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

は異なっています。また、「C4805の警告= '==':bool型の安全でない混合型と「const char」型の操作」

ありがとうございました。 C及びC++ == Bは== xがより非常に異なっている(A == X)& &(B == x)は、 前者は以下のように解釈される(A == B)== xの

+0

boost :: regexはどうですか? '/(\ s)+/$ 1'を置き換えますか? ;-) – Dario

答えて

5

、 aとbを比較し、その比較結果(trueまたはfalse) とxを比較します。あなたの場合、xは空白文字 で、ASCIIを使用する典型的な実装では、そのコードは32に等しい 0または1に変換されるブール値と比較します。 は常にfalseを与えます。

+0

愚かな私。あなたが正しい。ありがとう:) – navigator

関連する問題