• 字符串分割 函数实现


    char ** strsplit(char *line, char delimeter, int *count, int limit)//
    line是传入字符串
    delimeter是用来进行分割的字符
    count是一个用来计数的变量,传入传出,函数执行完之后,表示将line分成的字符串个数
    limit用来限制分割次数,函数从左至右进行分割,如果值设置过大,表示不限制;
    例如limit=2,但line中有多个delimeter,则line也只分割一次,从第一个delimeter处分割开来!

    #include <iostream>     // std::cout
    #include<string>
    using namespace std;
    
    char * strim(char *str)//去掉两端空格
    {
        char *end, *sp, *ep;
        size_t len;
        sp = str;
        end = ep = str + strlen(str) - 1;
        while (sp <= end && isspace(*sp)) sp++;
        while (ep >= sp && isspace(*ep)) ep--;
        len = (ep < sp) ? 0 : (ep - sp) + 1;
        sp[len] = '';
        return sp;
    }
    
    char ** strsplit(char *line, char delimeter, int *count, int limit)//
    {
        char *ptr = NULL, *str = line;
        char **vector = NULL;
    
        *count = 0;
        while ((ptr = strchr(str, delimeter))) {
            *ptr = '';
            vector = (char **)realloc(vector, ((*count) + 1)*sizeof(char *));
            vector[*count] = strim(str);
            str = ptr + 1;
            (*count)++;
            if (--limit == 0) break;
        }
        if (*str != '') {
            vector = (char **)realloc(vector, ((*count) + 1)*sizeof(char *));
            vector[*count] = strim(str);
            (*count)++;
        }
        return vector;
    }
    int main() {
        char** res = NULL;
        int count = 0;
        char line[] = "wo*hello*world*love";//这儿如果是char* line,则表示line是一个指向常量字符串数组的首字符,不允许更改!!!
        res = strsplit(line, '*', &count, 3);
        while (count-->0){   
            cout << *res << endl;
            res++;
        }
        res = NULL;//注意,最后res已经越界了
    
        system("pause");
        return 0;
    }
    char *strchr(const char* _Str,int _Val)
    char *strchr(char* _Str,int _Ch)
    头文件:#include <string.h>
    功能:查找字符串s中首次出现字符c的位置
    说明:返回首次出现c的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果s中不存在c则返回NULL
    返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL
     
    在C语言中 strchr 和 strstr函数都被包含在<string.h>头文件中,也就是要调用它们时要在程序前面包含<string.h>头文件,也就是写这个语句:#include<string.h>
    strchr函数原型:char * strchr(char * str, int ch); 功能就是找出在字符串str中第一次出项字符ch的位置,找到就返回该字符位置的指针(也就是返回该字符在字符串中的地址的位置),找不到就返回空指针(就是 null)。
    strstr 函数原型: char * strstr(char * str1,char * str2);功能就是找出在字符串str1中第一次出现字符串str2的位置(也就是说字符串sr1中要包含有字符串str2),找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)。
     
    手里拿着一把锤子,看什么都像钉子,编程界的锤子应该就是算法了吧!
  • 相关阅读:
    JS中attribute和property的区别
    px(像素)、pt(点)、ppi、dpi、dp、sp之间的关系
    计算几何
    动态凸包
    斜率DP题目
    斜率DP个人理解
    后缀数组题目
    CF#190DIV.1
    MANACHER---求最长回文串
    扩展KMP题目
  • 原文地址:https://www.cnblogs.com/chess/p/5259654.html
Copyright © 2020-2023  润新知