C 语言分词
2015-12-12 09:14
281 查看
分词是对字符串的基本操作,比如一行数据表示一个记录,记录中使用的分割符就可以做为分词符号,使用这个分词符号,可以得到记录的所有属性
C 的标准库中 “strtok” 提供了这样的功能,它的使用方式如下:
Output:
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; } private: static const size_t PATTERN_SIZE = 32; static const size_t TOKEN_SIZE_MAX = 1024; char m_pattern[PATTERN_SIZE]; char m_buf[BUFSIZ]; size_t m_nums_of_token; char *m_token_container[TOKEN_SIZE_MAX]; }; int main() { const char *s_source = "hello,world! hello,china!"; CStrTok token_str; CStrTok token_str2; token_str.init_pattern((char *)"! "); token_str2.init_pattern((char *)","); token_str.token(s_source); for (size_t i=0; i<token_str.nums_of_token(); ++i) { token_str2.token(token_str.GetTokenStr(i)); for (size_t j=0; j<token_str2.nums_of_token(); ++j) { printf("%s ", token_str2.GetTokenStr(j)); } putchar('\n'); } return 0; }
Output:
Splitting string "- This, a sample string." into tokens: This a sample string
相关文章推荐
- 运算符重载之* ->
- 自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
- Xcode中使用Git进行源码版本控制教程
- 06Redis入门指南笔记(安全、通信协议、管理工具)
- MySQL数据库设置远程访问权限方法
- 完美的css背景图片全屏显示,能比例缩小,不留空白
- Zookeeper 源码分析-启动
- java之内置的进制转换函数
- Deepin linux的一些问题和使用技巧
- 运算符重载之 * ->
- iOS中XML文档解析
- Activity四种启动模式
- Callable和Runnable的区别
- linux 后台启动
- 【Leetcode】3Sum 【wrong】
- 升级win10后光驱不能用找不到该怎么办?
- oracle将数据导出----UTL_FILE.FOPEN的用法
- 弹幕
- 对于Hadoop的MapReduce编程makefile
- BMP格式详解