博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用strtok_s函数从一个字符串中分离出单词
阅读量:6326 次
发布时间:2019-06-22

本文共 1335 字,大约阅读时间需要 4 分钟。

下面的代码从含有多个结束符的字符串中分离出单词来,需要对strtok_s有清楚的认识。这段代码是我在写一个处理文件中单词个数时用来分离读取到的字符串中的单词时写的,亲测可用~

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void 
ParseBuffer(CWordCounter *pCounter, CWordBuffer *buf)
{
    
char 
*strSrc = buf->m_buff;         
//缓冲块首地址
    
char 
*strDelim =
" \r\t\n"
;        
//缓冲块中单词之间的分隔符
    
char 
*strToken = NULL;             
//指向将被处理的单词
    
char 
*next_token = NULL;           
//保存缓冲块中下一个将被读取的单词的位置
 
    
string str;                        
//保存分离出来的单词
    
int 
nWordTotalInBytes = buf->m_nWordLengthInBytes;  
//需要被处理的单词总字节数
    
strToken = strtok_s(strSrc, strDelim, &next_token);
 
    
while 
(1)
    
{
        
while 
(NULL != strToken)
        
{
            
str.assign(strToken);
            
pCounter->InsertItem(str);
            
strToken = strtok_s(NULL, strDelim, &next_token);
        
}
//退出循环表示该部分单词分析的时候遇到了NULL结束符,继续分离缓冲块中剩下的字符
         
        
if 
((next_token+2) > (strSrc+nWordTotalInBytes))    
//这里最好自己用笔画一下,不然很容易出错!
        
{
//移动位置超过了最后一个有效字符
            
break
;
        
}
 
        
//移动到下一个开始扫描的字符
        
while 
(
            
((next_token+1) < (strSrc+nWordTotalInBytes))
//没有超过最后一个有效字符
            
&& !sw::IsLetter(*next_token))
        
{
            
++next_token;
            
//++nWordProcessedInBytes;
        
}
 
        
if 
((next_token+2) > (strSrc+nWordTotalInBytes))
        
{
//移动位置超过了最后一个有效字符
            
break
;
        
}
 
        
strToken = strtok_s(next_token, strDelim, &next_token);
        
if 
((next_token+2) > (strSrc+nWordTotalInBytes)
            
|| (NULL == strToken))
        
{
//移动位置超过了最后一个有效字符,或者位置内容为null
            
break
;
        
}
    
}
}

 

在设置过滤字符的时候注意下(这是我在实际中犯的错误),在过滤文本中的字符时最好加上:'\r'(回车)!

转载地址:http://qhmaa.baihongyu.com/

你可能感兴趣的文章
mesos
查看>>
Sun Grid Engine (SGE)大型集群作业调度系统
查看>>
信号处理——生成给定分布随机数
查看>>
2014年上半年软件设计师考试之绝密答案--有待大家完好
查看>>
Java动态代理学习【Spring AOP基础之一】
查看>>
在cmd窗口输入命令遇到You must run this command from a command prompt with administrator privilege怎么办?...
查看>>
ElasticSearch入门 第五篇:使用C#查询文档
查看>>
设置数据库状态
查看>>
Android之读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)...
查看>>
获取指定的内容---MXCMS ReadNews标签说明
查看>>
SPRING源码分析:IOC容器
查看>>
linux系统性能分析
查看>>
SystemTap----将SystemTap脚本编译成内核模块
查看>>
KVM虚拟机介绍
查看>>
构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(7)-MVC与EasyUI DataGrid
查看>>
Redis系列(六)-SortedSets设计技巧
查看>>
Latex技巧
查看>>
Android开发日记(一)
查看>>
java中简单字符替换
查看>>
【推荐】【给中高级开发者】构建高性能ASP.NET应用的几点建议
查看>>