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; }

  • 相关阅读:
    JSP中Session的使用
    深入了解父类引用指向子类
    Gamma校正及其OpenCV实现
    cocos2d-x3.0之请求网络(phpserver)
    Quartz使用-入门使用(java定时任务实现)
    ExtJs--15--Ext.is*各种类型推断的方法,简单看源代码就能够明确了
    小谈边界问题
    VS2010旗舰版安装图解
    LSPCI具体解释分析
    兔子--gradle安装和配置
  • 原文地址:https://www.cnblogs.com/yfceshi/p/7282076.html
Copyright © 2011-2022 走看看