Boost tokenizer examples

// Boost tokenizer examples  -------------------------------------------------//

// © Copyright John R. Bandela 2001. 

// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all
// copies. This software is provided "as is" without express or
// implied warranty, and with no claim as to its suitability for any
// purpose.

// See http://www.boost.org for updates, documentation, and revision history.

#include <iostream>
#include <iterator>
#include <string>
#include <boost/tokenizer.hpp>
#include <boost/array.hpp>

#define BOOST_INCLUDE_MAIN
#include <boost/test/test_tools.hpp>

int test_main(int, char*[])
{
  using namespace std;
  using namespace boost;
  
  // Use tokenizer
  {
		const string test_string = ";;Hello|world||-foo--bar;yow;baz|";
		string answer[] = { "Hello", "world",  "foo", "bar", "yow",  "baz" };
		typedef tokenizer<char_separator<char> > Tok;
		char_separator<char> sep("-;|");
		Tok t(test_string, sep);
    BOOST_CRITICAL_TEST(equal(t.begin(),t.end(),answer));		
  }
  {
		const string test_string = ";;Hello|world||-foo--bar;yow;baz|";
		string answer[] = { "", "", "Hello", "|", "world", "|", "", "|", "",
												"foo", "", "bar", "yow", "baz", "|", "" };
		typedef tokenizer<char_separator<char> > Tok;
		char_separator<char> sep("-;", "|", boost::keep_empty_tokens);
		Tok t(test_string, sep);
    BOOST_CRITICAL_TEST(equal(t.begin(), t.end(), answer));
  }
  {
    const string test_string = "This,,is, a.test..";
    string answer[] = {"This","is","a","test"};
    typedef tokenizer<> Tok;
    Tok t(test_string);
    BOOST_CRITICAL_TEST(equal(t.begin(),t.end(),answer));
  }

  {
    const string test_string = "Field 1,/"embedded,comma/",quote ///", escape ";
    string answer[] = {"Field 1","embedded,comma","quote /""," escape //"};
    typedef tokenizer<escaped_list_separator<char> > Tok;
    Tok t(test_string);
    BOOST_CRITICAL_TEST(equal(t.begin(),t.end(),answer));

  }

  {
    const string test_string = ",1,;2///";3//;,4,5^//,/'6,7/';";
    string answer[] = {"","1","","2/"","3;","4","5//","6,7",""};
    typedef tokenizer<escaped_list_separator<char> > Tok;
    escaped_list_separator<char> sep("//^",",;","/"/'");
    Tok t(test_string,sep);
    BOOST_CRITICAL_TEST(equal(t.begin(),t.end(),answer));

  }

  {
    const string test_string = "12252001";
    string answer[] = {"12","25","2001"};
    typedef tokenizer<offset_separator > Tok;
    boost::array<int,3> offsets = {{2,2,4}};
    offset_separator func(offsets.begin(),offsets.end());
    Tok t(test_string,func);
    BOOST_CRITICAL_TEST(equal(t.begin(),t.end(),answer));

  }

  // Use token_iterator_generator
  {
    
    const string test_string = "This,,is, a.test..";
    string answer[] = {"This","is","a","test"};
    typedef token_iterator_generator<char_delimiters_separator<char> >::type Iter;
    Iter begin = make_token_iterator<string>(test_string.begin(),
      test_string.end(),char_delimiters_separator<char>());
    Iter end;
    BOOST_CRITICAL_TEST(equal(begin,end,answer));
  }

  {
    const string test_string = "Field 1,/"embedded,comma/",quote ///", escape ";
    string answer[] = {"Field 1","embedded,comma","quote /""," escape //"};
    typedef token_iterator_generator<escaped_list_separator<char> >::type Iter;
    Iter begin = make_token_iterator<string>(test_string.begin(),
      test_string.end(),escaped_list_separator<char>());
    Iter end;
    BOOST_CRITICAL_TEST(equal(begin,end,answer));

  }

  {
    const string test_string = "12252001";
    string answer[] = {"12","25","2001"};
    typedef token_iterator_generator<offset_separator>::type Iter;
    boost::array<int,3> offsets = {{2,2,4}};
    offset_separator func(offsets.begin(),offsets.end());
    Iter begin = make_token_iterator<string>(test_string.begin(),
      test_string.end(),func);
    Iter end= make_token_iterator<string>(test_string.end(),
      test_string.end(),func);
    BOOST_CRITICAL_TEST(equal(begin,end,answer));

  }
  
  // Test copying
  {
    string s = "abcdef";
    token_iterator_generator<offset_separator>::type beg, end, other;
    boost::array<int,3> ar = {{1,2,3}};
    offset_separator f(ar.begin(),ar.end());
    beg = make_token_iterator<string>(s.begin(),s.end(),f);
    
    ++beg;
    other = beg;
    ++other;

    BOOST_CRITICAL_TEST(*beg=="bc");
    BOOST_CRITICAL_TEST(*other=="def");
    
    other =  make_token_iterator<string>(s.begin(),s.end(),f);

    BOOST_CRITICAL_TEST(*other=="a");
  }

  // Test non-default constructed char_delimiters_separator
  {
    const string test_string = "how,are you, doing";
    string answer[] = {"how",",","are you",","," doing"};
    tokenizer<> t(test_string,char_delimiters_separator<char>(true,",",""));
    BOOST_CRITICAL_TEST(equal(t.begin(),t.end(),answer));
  }

  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值