• 基于memcached中命令分析函数tokenize_command改造的split函数


    今天使用C重构php代码,需要手写一个split函数,于是就模仿memcached中获取用户命令的函数

    static size_t tokenize_command(char *command, token_t *tokens, const size_t max_tokens)

    写了一个简单的split函数:

    #include<stdio.h>
    #include<string.h>
    #include<malloc.h>
    
    typedef struct node {
        char *value;
        struct node *next;
    }Node;
    
    
    /**
     * 字符串切割函数
     * pattern 字符参数      切割符参数,分隔字符串所使用的参数
     * str     字符串参数    被分切割的字符串
     * data    链表      用于存储切割完的字符串
     * 失败    返回 1
     * 成功    返回 0
     */
    Node *split(char pattern,char *str)
    {
        if(!pattern || (strlen(str) <= 0)) return NULL;
        char *e,*s;
        Node *data,*p,*tail;
        unsigned int i,len = strlen(str);
        e = s = str;
        data = (Node *)malloc(sizeof(Node));
        tail = data;
        tail->next = NULL;
        tail->value = "";
    
        for(i = 0;i<len;i++)
        {
            if(*e == pattern)
            {
                if(s != e)
                {
                    p=(Node *)malloc(sizeof(Node));
                    p->value = s;
                    p->next = NULL;
    
                    tail->next = p;
                    tail = p;
    
                    *e = '';
                    if(e == (str + len - 1))
                    {
                        e++;
                        s = e;
                        break;
                    }
    
                }
                s = e+1;
            }
            e++;
        }
    
        if(s != e)
        {
    
            p=(Node *)malloc(sizeof(Node));
            p->value = s;
            p->next = NULL;
            tail->next=p;
            tail=p;
        }
        return data;
    }

    好多年没有写过C了,基本上还停留在当初大学毕业的水平,呵呵。

  • 相关阅读:
    C# FTP操作
    SWUST OJ(963)
    插入排序(折半插入排序)
    SWUST OJ(962)
    SWUST OJ(961)
    SWUST OJ(960)
    SWUST OJ(957)
    SWUST OJ(956)
    SWUST OJ(955)
    SWUST OJ(954)
  • 原文地址:https://www.cnblogs.com/lrxing/p/4415335.html
Copyright © 2020-2023  润新知