正規表現で検索して色付きで出力したい。これを行うには、boost::sregex_token_iterator を使用しました。これは私のコードです
boost::regex re("ab.");
string s="";
string buf;
string infile("retest.txt");
//string color="green";
ifstream in(infile.c_str());
int lcount=0;
while (getline(in,buf))
{
boost::sregex_token_iterator p(buf.begin(), buf.end(), re, 0);
boost::sregex_token_iterator end;
lcount++;
cout <<"line : "<<lcount<<endl;
for (;p != end;++p)
{
string m(p->first, p->second);
cout<< m <<endl;
//cout <<*(p->first)<<endl;
//cout <<*(p->second)<<endl;
//unsigned int pos = buf.find(m);
buf = buf.insert(p->first,"\e[0;32m");
buf = buf.insert(p->second+m.length()+7,"\e[0m");
}
cout<<"\n";
s.append(buf);
s.append("\n");
}
in.close();
cout <<"s is: "<<s<<endl;
return 0;
}
しかし、私はこのエラーが発生します:
/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/ios_base.h:43 から、 /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ios:43 から、/usr/ からlocal/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ostream:40、/usr/local/lib/ からgcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/iostream:40、main3.cc:1 から: /usr/local/ lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.h:1182:7: 注: void std ::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::iterator, std::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT) [with _CharT =チャー; _Traits = std::char_traits; _Alloc = std::アロケータ; 標準:: basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator >; typename _Alloc::rebind<_CharT>::other::pointer = char*; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1182:7: 注: 候補は 3 つの引数を想定しており、2 つが /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/ で提供されています。 ./../../../include/c++/4.7.2/bits/basic_string.h:1199:9: 注: テンプレート void std::basic_string::insert(std::basic_string<_CharT, _Traits, _Alloc>::iterator、_InputIterator、_InputIterator) [with _InputIterator = _InputIterator; _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/ basic_string.h:1199:9: 注: 43、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ios:43 から、/ からusr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ostream:40、/usr/local/ からlib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/iostream:40、main3.cc:1 から: /usr/ local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.h:1230:7: 注意: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::size_type, const std::basic_string<_CharT, _Traits、_Alloc>&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケーター; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string; 標準:: basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/ c++/4.7.2/bits/basic_string.h:1230:7: 注: 「const __gnu_cxx::__normal_iterator >」から「std::basic_string::size_type {aka unsigned int}」への引数 1 の既知の変換はありません /usr/local /lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.h:1252:7: 注: std ::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::size_type, const std::basic_string<_CharT, _Traits , _Alloc>&, std::basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケーター; 標準:: basic_string<_CharT, _Traits, _Alloc> = std::basic_string; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1252:7: 注: 候補は 4 つの引数を想定しており、2 つが /usr/local/lib/gcc/i686-pc-linux-gnu/4.7 からインクルードされたファイルで提供されます.2/../../../../include/c++/4.7.2/string:55:0、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2 から/../../../../include/c++/4.7.2/bits/locale_classes.h:42、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2 から/../../../../include/c++/4.7.2/bits/ios_base.h:43、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2 から/../../../../include/c++/4.7.2/ios:43、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../ から../../../include/c++/4.7.2/ostream:40, /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/iostream:40 から、main3.cc から:1: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.tcc: 361:6: 注意: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::size_type, const _CharT *, std::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケーター; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.tcc:361:6: 注: 候補には 3 つの引数が必要です。_Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::size_type, const _CharT*) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケーター; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1293:7: 注: 引数 1 の âconst __gnu_cxx::__normal_iterator >â から âstd::basic_string::size_type {aka unsigned int}â への既知の変換はありません / usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.h:1316:7:注: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std:: basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケータ; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1316:7: 注: 候補は 3 つの引数を想定しており、2 つが /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/ で提供されています。 ./../../../include/c++/4.7.2/bits/basic_string.h:1334:7: 注意: std::basic_string<_CharT, _Traits, _Alloc>::iterator std::basic_string< _CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::iterator, _CharT) [with _CharT = char; _Traits = std::char_traits; _Alloc = std:: アロケータ; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator >; typename _Alloc::rebind<_CharT>::other::pointer = char*] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1334:7: 注: 引数 1 の âconst __gnu_cxx::__normal_iterator >â から âstd::basic_string::iterator {別名 __gnu_cxx::__normal_iterator > への既知の変換はありません}â main3.cc:37:51: error: no matching function for call to âstd::basic_string::insert(__gnu_cxx::__normal_iterator >, const char [5])â main3.cc:37:51: note: 候補/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/string:54 からインクルードされたファイル:0、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/locale_classes.h から:42, /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/ios_base.h:43 から、 /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ios:43 から、/usr/ からlocal/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ostream:40、/usr/local/lib/ からgcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/iostream:40、main3.cc:1 から: /usr/local/ lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.h:1182:7: 注: void std ::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::iterator, std::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT) [with _CharT =チャー; _Traits = std::char_traits; _Alloc = std::アロケータ; 標準:: basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator >; typename _Alloc::rebind<_CharT>::other::pointer = char*; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1182:7: 注: 候補は 3 つの引数を想定しており、2 つが /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/ で提供されています。 ./../../../include/c++/4.7.2/bits/basic_string.h:1199:9: 注: テンプレート void std::basic_string::insert(std::basic_string<_CharT, _Traits, _Alloc>::iterator、_InputIterator、_InputIterator) [with _InputIterator = _InputIterator; _CharT = char; _Traits = std::char_traits; _Alloc = std::allocator] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/ basic_string.h:1199:9: 注:Alloc>::length、std::allocator >())))。/include/c++/4.7.2/iostream:40、main3.cc:1 から: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../ ../include/c++/4.7.2/bits/basic_string.h:1230:7: 注意: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert( std::basic_string<_CharT, _Traits, _Alloc>::size_type, const std::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケータ; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1230:7: 注: â__gnu_cxx::__normal_iterator >â から âstd::basic_string:: への引数 1 の既知の変換はありません。size_type {aka unsigned int}â /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/ basic_string.h:1252:7: 注意: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>:: size_type, const std::basic_string<_CharT, _Traits, _Alloc>&, std::basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type) [with _CharT =チャー; _Traits = std::char_traits; _Alloc = std::アロケーター; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1252:7: 注: 候補には 4 つの引数が必要です。_Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::size_type, const _CharT*, std::basic_string<_CharT, _Traits, _Alloc> ::size_type) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケーター; std::basic_string<_CharT, _Traits, _Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.tcc:361:6: 注: 候補は 3 つの引数を想定しており、2 つが /usr/local/lib/gcc/i686-pc-linux-gnu/4.7 からインクルードされたファイルで提供されます.2/../../../../include/c++/4.7.2/string:54:0、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2 から/../../../../include/c++/4.7.2/bits/locale_classes.h:42、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2 から/../../../../include/c++/4.7. 2/bits/ios_base.h:43、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7 から。 2/ios:43、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ostream から: 40、/usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/iostream:40 から、main3 から.cc:1: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string. h:1293:7: 注意: std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::size_type, const _CharT*) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケータ; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string; std::basic_string<_CharT、_Traits、_Alloc>::size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ bits/basic_string.h:1293:7: 注: â__gnu_cxx::__normal_iterator >â から âstd::basic_string::size_type {aka unsigned int}â /usr/local/lib/gcc/i686- への引数 1 の既知の変換はありませんpc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string.h:1316:7: 注意: std::basic_string<_CharT, _Traits , _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::insert(std::basic_string<_CharT, _Traits, _Alloc>::size_type, std::basic_string<_CharT, _Traits, _Alloc>::size_type, _CharT ) [ with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケーター; std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string; std::basic_string<_CharT, _Traits, _Alloc>:: size_type = unsigned int] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/basic_string. h:1316:7: 注: 候補は 3 つの引数を想定しており、2 つの引数が提供されています /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/ c++/4.7.2/bits/basic_string.h:1334:7: 注意: std::basic_string<_CharT, _Traits, _Alloc>::iterator std::basic_string<_CharT, _Traits, _Alloc>::insert(std:: basic_string<_CharT, _Traits, _Alloc>::iterator, _CharT) [with _CharT = char; _Traits = std::char_traits; _Alloc = std::アロケーター; std::basic_string<_CharT, _Traits, _Alloc>::iterator = __gnu_cxx::__normal_iterator >; typename _Alloc::rebind<_CharT>::other::pointer = char*] /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../.. /include/c++/4.7.2/bits/basic_string.h:1334:7: 注:
p->first
の型が挿入関数が受け入れる型ではないことを私は知っています。しかし、これらを互いに変換する方法がわかりません。