zoukankan      html  css  js  c++  java
  • strtok()切割字符串函数

    
    #include <iostream>
    #include <string.h>
    using namespace std;
    char *my_strtok(char *dist,const char *src)
    {
        static char *result;
        //此处使用静态变量保存dist,
        //为了满足库函数strtok(NULL," ")的实现。
        char map[32];
        const char *p = src;
        memset(map,0,sizeof(map));
        while (*p)
        {
            map[*p >> 3] |= (0x1 << (*p & 0x7));
            p++;
        }
        //ASCII中总共仅仅有256个字符。所以我们将src映射到32个char数组中,
        //然后将较低的7位取出作为该数组中8个位中的一位,而且将该位置1。
        //表示这个位置存在。在这里要保证唯一确定的一一相应的关系,刚好
        //32个char数组就能够满足我们的需求了。
        char *q;
        if (dist)
            q = dist;
        else
            q = result;
        //假设从外部传进来的第一个參数是NULL。那么我们依据上一个參数
        //的结束位置開始。这里要用到保存的result变量。

    while ((map[*q >> 3] & (1 << (*q & 0x7))) && *q)q++; //除去前面的多余切割符号。

    dist = q; for (; *dist; dist++) { if (map[*dist >> 3] & (0x1 << (*dist & 0x7))) { *dist=''; dist++; break; } //第一次出现制定切割符的地放,然后停止break。 } result = dist; //此处result的作用就来了,保存上一次操作的最后一个位置的下一个位置。 //也就是说,假设外面传进来NULL作为第一个參数的话,我们就会从result開始。

    return q; } int main() { char s[] = "abc efg hlk"; cout << my_strtok(s, " ") << endl; cout<<my_strtok(NULL, " ")<<endl; cout << my_strtok(NULL, " ") << endl; return 0; }

  • 相关阅读:
    毕业季–遗言
    Storm 疑难杂症。
    Python3.2 安装 MySQLdb
    apk 文件可下载配置
    'GBK' is not a supported encoding name. For information on defining a custom encoding, see the docum
    croe 增加配置文件。
    postman 特殊字符被转义,如 参数+号变成了空格
    websocket 学习
    Rhino 基于java的javascript实现
    SJS(simple javascript)html5开发扩展库
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7282076.html
Copyright © 2011-2022 走看看