字符串分割 函数实现

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)。
 
手里拿着一把锤子,看什么都像钉子,编程界的锤子应该就是算法了吧!
原文地址:https://www.cnblogs.com/chess/p/5259654.html