您的位置:首页 > 其它

C 语言分词

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: