• 字符串分割函数(不用库函数)


    /*
    一个字符串里面有n个ch字符,
    一般能够把原字符串分割成n-1(字符在开始和结尾),
    n(字符在开始或结尾)或n+1(字符在非开始和结尾)个
    */
    char** strsplit(char const *str, char ch)
    {
        char **res;//存放结果
        char const* str1 = &str[0];//由于要遍历两次,所以先记录第一个元素位置
        int i = 0;//用于计算出现次数
        while (*str != '')
        {
            if (*str == ch)
            {
                i++;
            }
            str++;
        }//i为出现的次数
        if (i == 0)
        {
            return NULL;
        }
        res = (char**)malloc(sizeof(char*)*(i + 1));//分配二维数组行数,都按n+1计算,如果字符出现在第一个则返回的第一行为空
        int len = 0;//每一个字符的长度
        char buf[100];//临时存储字符的数组
        i = 0;
        while (*str1 != '')
        {
            if (*str1 == ch)//若没有碰到相同字符则一直向buf里面放置,
            {//如果碰到,则先分配空间,然后把buf放进里面,再加上
                buf[len] = '';
                res[i] = (char*)malloc(sizeof(char)*(len + 1));
                int k = 0;
                while (buf[k] != '')
                {
                    res[i][k] = buf[k];
                    k++;
                }
                res[i][k] = '';
                len = 0;
                i++;
            }
            else
            {
                buf[len++] = *str1;
            }
            str1++;
        }
        res[i] = (char*)malloc(sizeof(char)*(len + 1));
        int k = 0;
        while (buf[k] != '')
        {
            res[i][k] = buf[k];
            k++;
        }
        res[i][k] = '';
        return res;
    }

    略显繁琐,不过能用。

    补充一个线程不安全的库函数法:

    char ori[] = "21123248299";
        for (char * token = strtok(ori, "2"); token != NULL; token = strtok(NULL, "2"))
        {
            printf("%s
    ", token);
        }

    方法简单,但是strtok函数是在静态区进行分割的函数,简单用用还行,尽量还是多用自己编写的函数吧。

  • 相关阅读:
    学习进度笔记
    学习进度笔记
    学习进度笔记
    《一级架构师》阅读笔记
    学习进度笔记
    学习进度笔记
    学习进度笔记
    mysql
    error: 'wblog/' does not have a commit checked out
    有用的网页
  • 原文地址:https://www.cnblogs.com/wyc199288/p/5310799.html
Copyright © 2020-2023  润新知