zoukankan      html  css  js  c++  java
  • 使用strtok_s函数从一个字符串中分离出单词

    下面的代码从含有多个结束符的字符串中分离出单词来,需要对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 = " ";         //缓冲块中单词之间的分隔符
        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;
            }
        }
    }

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

  • 相关阅读:
    Myeclipse2013 SVN安装方法以及项目上传到svn服务器
    Gson把json串转换成java实体对象
    使用HttpClient向服务器发送restful post请求
    使用HttpURLConnection向服务器发送post和get请求
    http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/
    CAS单点登录配置[5]:测试与总结
    CAS单点登录配置[4]:客户端配置
    CAS单点登录配置[3]:服务器端配置
    CAS单点登录配置[2]:证书生成
    【Oracle/Java】向三张表各插入百万数据,共用时18分3秒,平均每张表6分钟
  • 原文地址:https://www.cnblogs.com/xumaojun/p/8529020.html
Copyright © 2011-2022 走看看