分词算法学习笔记之string::substr


研究分词算法时发现substr函数,不太理解 大笑


百度百科的解释:

substr 方法

  basic_string::substr
  basic_string substr(size_type _Off = 0,size_type _Count = npos) const;
  功能:从一个字符串复制一个从指定位置开始,并具有指定长度的子字符串。
  参数:
  _Off: 所需的子字符串的起始位置。字符串中第一个字符的索引为 0,默认值为0.
  _Count: 复制的字符数目
  返回值:
  一个子字符串,从其指定的位置开始

备注:

如果 length 为 0 或负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾



举例:

//对纯中文句子s1的正向减字最大匹配分词
string CHzSeg::SegmentHzStrMM(CDict &dict,string s1)const
{
	string s2="";//保存句子s1的分词结果
	while(!s1.empty())
	{
		unsigned int len=s1.size();
		//如果待切分的句子大于最大切分单元
		//len=最大切分单元,否则len=句子的长度
		if(len>MAX_WORD_LENGTH)
			len=MAX_WORD_LENGTH;
		//取s1句子最左边长度len为的子句子
		string w=s1.substr(0,len);
		//判断刚刚取出来的子句子是不是一个词
		bool isw=dict.IsWord(w);
		//当w中至少有2个中文字&&不能构成字的时候,减去最右边的一个中文字
		while(len>2&&isw==false)
		{
			///减去最右边的一个中文字
			len-=2;
			w=w.substr(0,len);
			//再次判断减字后的w是不是构成一个词
			isw=dict.IsWord(w);
		}
		s2+=w+SEPARATOR;
		//如果第二个参数为0或者负数,将返回一个空字符串。如果没有指定该参数,则子字符串将延续到字符串的结尾
		s1=s1.substr(w.size());
	}//end while
	return s2;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值