我用的是微软的GRETA正则表达式模板类库,我有一段代码请高手帮我看一下.我有几个类型不会转换.
match_results results1;  string str1("many,mamy,maxy");

rpattern pat1("ma"/*, GLOBAL | ALLBACKREFS*/); 
cout << "group count:\t" << pat1.cgroups() << endl << endl; 
match_results::backref_type bra = pat1.match(str1, results1); 
if (bra.matched) 

cout << "match count:\t" << results1.cbackrefs() << endl;
for (int i=0; i < results1.cbackrefs();i ++)
cout << "price: " << results1.backref(i) << endl;
cout << bra << endl;
}
1,请问我怎样把match_results::backref_type bra 里的bra所指的里面的值转为CString
2,请问怎样把results1.backref(i)这个值也转为CString.
谢谢了.

解决方案 »

  1.   

    #include <sstream>std::stringstream ss;
    ss<< results1.backref(i);
    CString tmp = ss.str().c_str();ss.str("");
    ss<<bra;
    CString tmp2 = ss.str().c_str();
      

  2.   

    谢了.
    请问一下
    #include <sstream>std::stringstream ss;
    ss<< results1.backref(i);
    CString tmp = ss.str().c_str();
    ss<< results1.backref(i);
    "<<"这个符号是何物?如何用?
    再一次谢谢了
    不过我已经完成了.
    是这样完成了:
    results1.backref(i).str().c_str()
    我没有用std::stringstream ss;请问行不行.我哪样做有没有不妥?
      

  3.   

    std::stringstream ss 标准库中的字符流,同cout,cin一样使用,非常方便,它也派生自iostream
      

  4.   

    感谢 masterz 和 ysf002
    再问一个问题就结贴.
    match_results::backref_type bra = pat1.match(str1, results1); 
    这句话里,match好像只能接受三种类型的参数:sta::string,const char*, const_iterator
    但是std::string & const char* 都是单字节的.我的工程里不仅要处现单字节而且还要处理双字节的,因为还要用到简体中文和繁体中文,用的全都是std::wstring,
    请问该怎么办?
    我用了一个WideCharToMultiByte,不过还是不行??????????
      

  5.   

    GRETA应该是一个模板,你看看它的文档
    match_results<TCAR> ? 可能是这种形式,我只用过boost regex library,没有用过GRETA
    http://www.fruitfruit.com/vc/boost/boost_regex_test.cpp
      

  6.   

    可以自己写一个转换函数,一般来讲,文本文件中的汉子编码是gb2312或者是GBK,是两个字节一个汉字,包括中文标点符号。汉字头一个ascii码值大于128一次为负数,根据这个原理,可以自己写一个如果第一个字节大于128那么它是一个汉字,将两个连续的字节放在一个wchar_t,然后将这个宽字符放入wstring;如果小于128,那么应该是个ascii字符,wchar_t高位头一个字节为零,剩下一个字节就是原来的ascii码值。当有wchar_t转化为原来的char时,反过来执行上面的过程。楼主是搞什么的,没准我们做的一样的东西!呵呵!加油!
      

  7.   

    ysf002(杨飞)
    这位大哥,你说的自己写一个转换函数,实在是有点难度,我自己还没有那个水平.
    能不能说得再清楚一点,谢谢了.