C 语言分词

分词是对字符串的基本操作,比如一行数据表示一个记录,记录中使用的分割符就可以做为分词符号,使用这个分词符号,可以得到记录的所有属性

C 的标准库中 “strtok” 提供了这样的功能,它的使用方式如下:

#include <stdio.h>
#include <string.h>
#include <assert.h>

class CStrTok
{
public:
	void init_pattern(char *pattern) {
		strncpy(m_pattern, pattern, PATTERN_SIZE);
	} 
	void token(const char *s) {
		m_nums_of_token = 0;
		memset(m_token_container, 0, TOKEN_SIZE_MAX);
		strncpy(m_buf, s, BUFSIZ);
		m_token_container[m_nums_of_token] = strtok(m_buf, m_pattern);
		while (m_token_container[m_nums_of_token] != NULL) {
			++m_nums_of_token;
			assert(m_nums_of_token!=TOKEN_SIZE_MAX);
			m_token_container[m_nums_of_token] = strtok(NULL, m_pattern);
		}
	} 
	size_t nums_of_token() {
		return m_nums_of_token;
	} 
	char * GetTokenStr(int index) {
		return m_token_container[index];
	}

	void reset() {
		m_nums_of_token = 0;
	}

priva
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C语言中的分词和语法分析算法比较复杂,需要一定的算法基础和编程经验。下面简单介绍一些常见的分词算法和语法分析算法,供您参考。 1. 分词算法 分词算法是将一个长字符串按照一定规则切分成一个个词语的过程。常见的分词算法有正向最大匹配、逆向最大匹配和双向最大匹配等。 正向最大匹配算法是从左往右扫描字符串,从最长的词语开始匹配,直到匹配成功或者匹配到最短的词语。匹配成功后,将该词语从字符串中切分出来,并从字符串中删除该词语,然后继续扫描余下的字符串。逆向最大匹配算法和正向最大匹配算法类似,只是从右往左扫描字符串。 双向最大匹配算法是将正向最大匹配算法和逆向最大匹配算法结合起来,从而避免了单向匹配可能出现的错误。 2. 语法分析算法 语法分析算法是将一个长字符串按照语法规则分析成一个个语法单元的过程。常见的语法分析算法有递归下降分析、LR分析和LL分析等。 递归下降分析算法是一种自顶向下的语法分析算法,它从语法的最高层次开始递归下降分析,直到分析出最底层的语法单元。递归下降分析算法需要根据语法规则手动编写每个语法单元的识别代码,因此比较繁琐。 LR分析算法是一种自底向上的语法分析算法,它从语法的最底层开始分析,直到分析出最高层的语法单元。LR分析算法使用LR表来记录语法规则和状态转移,可以自动生成识别代码,因此比递归下降分析算法更高效。 LL分析算法是一种自顶向下的语法分析算法,它与递归下降分析算法类似,但使用LL表来记录语法规则和状态转移,可以自动生成识别代码,因此比递归下降分析算法更高效。 以上是简单介绍了C语言分词算法和语法分析算法的一些常见算法,具体实现细节需要根据具体的需求和数据来确定。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值