zoukankan      html  css  js  c++  java
  • 自己实现strtok函数

    思路:每次在原来字符串中查找分隔字符串,将分隔字符串中所有字符设为'',然后输出分隔串前的子串,同时更新原串的起始位置。

    PS:有不少博客作者自己实现的方法中往往只将分隔串当做一个字符,实际上可以是一个字符串,这点需要注意

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 char* my_strtok(char* str, const char *delimit)
     6 {
     7     static char* tmp = NULL;
     8     char *ret = NULL;
     9     if(delimit == NULL) return str;
    10     if(str != NULL)
    11         tmp = str;
    12     if(tmp == NULL) return NULL;
    13     ret = tmp;
    14     char *p = strstr(tmp, delimit);
    15     if(p != NULL)
    16     {
    17         tmp = p + strlen(delimit);//tmp要更新为下次的起始点
    18         int i;
    19         for(i = 0; i < strlen(delimit);i++)//将原串中的分隔符字符串都设置为'',保证输出ret时,只输出第一段,达到分割的效果
    20         {
    21             *(p + i) = '';
    22         }
    23     } else {        //分隔符无法对剩下的字符串进行分割了
    24         tmp = NULL; //下次调用将直接返回NULL
    25     }
    26     return ret;
    27 }
    28 
    29 
    30 int main()
    31 {
    32     char str[] = "aabbccddcceeff";
    33     char str2[] = "aabbccddcceeff";
    34 
    35     puts("Output from strtok:");
    36     char * ret = strtok(str, "cc");
    37     while(ret != NULL)
    38     {
    39         puts(ret);
    40         ret = strtok(NULL, "cc");
    41     }
    42 
    43     puts("Output from my_strtok:");
    44     char * ans = my_strtok(str2, "cc");
    45     while(ans != NULL)
    46     {
    47         puts(ans);
    48         ans = my_strtok(NULL, "cc");
    49     }
    50 
    51     return 0;
    52 }

    测试输出如下:

  • 相关阅读:
    Android textAppearance的属性设置及TextView属性详解
    Eclipse Hot Keys
    面向对象(一)
    Java基础知识(下)
    code2uml使用教程
    AndroidDevTools简介
    idea2020.3 安装插件JetBrains 插件市场安装 Cloud Toolkit
    在 Mac 上撰写和格式化备忘录-添加提醒-添加日历
    macbook-键盘连击问题002
    创业团队建设与管理
  • 原文地址:https://www.cnblogs.com/Zbtrik/p/7372770.html
Copyright © 2011-2022 走看看