4

とで簡単なコードを動作させようとしていboost::is_any_ofますboost::replace_all_copy。スニペットは以下のとおりです。

std::string someString = "abc.def-ghi";
std::string toReplace = ".-";
std::string processedString = boost::replace_all_copy(someString, boost::is_any_of(toReplace), " ");

ただし、ここに貼り付けるには長すぎるコンパイラエラーが発生します。これらの2つの機能の経験がある人は、私のエラーを指摘できますか?

4

2 に答える 2

2

私はその特定の方法にあまり精通していませんがreplace_all_copy、の結果ではなく、置換文字列だけが必要なようですis_any_of

文字列アルゴリズムの他のオプションをざっと見てみると、次のような正規表現バージョンも機能することに気づきました。

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

int main(int argc, char** argv) {                                                                                                                                                    
    std::string someString = "abc.def-ghi";                                                                                                                                          
    std::cout << someString << std::endl;                                                                                                                                            
    std::string toReplace = "[.-]"; // character class that matches . and -                                                                                                          
    std::string replacement = " ";                                                                                                                                                   
    std::string processedString =                                                                                                                                                    
        boost::replace_all_regex_copy(someString, boost::regex(toReplace), replacement);                                                                                             
    std::cout << processedString << std::endl;                                                                                                                                       
    return 0;                                                                                                                                                                        
} 

出力:

abc.def-ghi
abc def ghi

これには、ブースト正規表現ライブラリに対するリンクが必要です。私の場合、私は以下で構築しました:

g++ -L/usr/local/Cellar/boost/1.52.0/lib -lboost_regex-mt main.cpp

于 2013-02-06T16:44:08.190 に答える