C++字符串根据字符截断为二级指针

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;

char ** cutStringT(char * p,char c,int *n)
{
    char *a = p;//定义一个头指针
    char *b = p;//定义一个末尾指针
    int count = 0;//每段字符串计数
    char **arr = (char **)malloc(10 * sizeof(char *));//在堆分配十个地址空间
    //遍历 直到字符串最后
    while (*a != '\0' && *n <= 10)
    {
        b = strchr(a, c);//获取char c的指针
        if (b == NULL) break;//找不到则退出循环
        count = strlen(a) - strlen(b);//计算得出要存储的字符数
        arr[*n] = (char *)malloc(count * sizeof(char) + 1);//在堆分配对应大小的内存空间 多一个分配给结束符
        memcpy(arr[*n], a, count);//复制字符串
        arr[*n][count] = '\0';//添加结束字符串
        a = b + 1;//定义新的头指针
        *n = *n+1;//多一个
    }
    return arr;
}

void main()
{
    char str[] = "zxc,asd,xdasd,cfasd,";//要转化的字符串
    int n = 0;//包含个数
    char **p = cutStringT(str,',', &n);//调用方法返回二级指针
    //打印
    for (int i = 0; i < n; i++)
    {
        cout << p[i] << endl;
    }
    //释放内存
    for (int i = 0; i < n; i++)
    {
        free(p[i]);
    }
    free(p);
    system("pause");
}

 

posted @ 2018-02-08 10:25  花兮  阅读(412)  评论(0编辑  收藏  举报