zoukankan      html  css  js  c++  java
  • 字符串分割 函数实现

    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)。
     
    手里拿着一把锤子,看什么都像钉子,编程界的锤子应该就是算法了吧!
  • 相关阅读:
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    449. Serialize and Deserialize BST
    114. Flatten Binary Tree to Linked List
    199. Binary Tree Right Side View
    173. Binary Search Tree Iterator
    98. Validate Binary Search Tree
    965. Univalued Binary Tree
    589. N-ary Tree Preorder Traversal
    eclipse设置总结
  • 原文地址:https://www.cnblogs.com/chess/p/5259654.html
Copyright © 2011-2022 走看看