zoukankan      html  css  js  c++  java
  • C提高_day03_两个辅助指针变量挖字符串(强化4)

    #define  _CRT_SECURE_NO_WARNINGS 
    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    //两个辅助指针变量挖字符串, 的第三种内存模型
    
    //指针做函数参数
    
    void FreeMem(char **myp,int count)   //释放内存函数
    {
        int i=0;
        if(myp == NULL)
        {
            return;
        }
        for(i=0;i<count;i++)
        {
            if(myp[i] != NULL)
            {
                free(myp[i]);
            }
        }
        if(myp != NULL)
        {
            free(myp);
        }
    }
    
    int spitString4(char *buf1,char c,char ***myp3,int *count)    //**pp二级指针做输入
    {
        int ret =0;
        char *p=NULL, *pTmp = NULL;
        int    tmpcount = 0;
        int len;
        char **myp=NULL;
    
        //1 p和ptmp初始化
        p = buf1;
        pTmp = buf1;
        
        //第一遍求出count
        do
        {
            //2 检索符合条件的位置 p后移  形成差值 挖字符串
            p = strchr(p, c);
            if (p != NULL)
            {
                if (p-pTmp > 0)
                {
                    tmpcount ++;
                    //3重新 让p和ptmp达到下一次检索的条件
                    pTmp = p = p + 1;
                }
            }
            else
            {
                break;
            }
        } while (*p!='');
    
        *count = tmpcount;
    
        //根据多少行精确分配内存
        myp=(char **)malloc(tmpcount * sizeof(char *));
        if(myp==NULL)
        {
            ret=-1;
            printf("func spitSpring4() err :%d malloc(tmpcount * sizeof(char *))",ret);
            goto END;
            //return -1;
        }
    
          /////////////////////////////////////////////////////////
    
        tmpcount=0;
        //1 p和ptmp初始化
        p = buf1;
        pTmp = buf1;
        
        do
        {
            //2 检索符合条件的位置 p后移  形成差值 挖字符串
            p = strchr(p, c);
            if (p != NULL)
            {
                if (p-pTmp > 0)
                {
                    len=p-pTmp+1;
                    myp[tmpcount]=(char *)malloc(len * sizeof(char));
                    if(myp==NULL)
                    {
                        //return -1;
                        ret=-1;
                         printf("func spitSpring4() err :%d malloc(tmpcount * sizeof(char *))",ret);
                        goto END;
                    }
                    strncpy(myp[tmpcount],pTmp,p-pTmp);
                    myp[tmpcount][p-pTmp]='';
                    tmpcount ++;
                    //3重新 让p和ptmp达到下一次检索的条件
                    pTmp = p = p + 1;
                }
            }
            else
            {
                break;
            }
        } while (*p!='');
    
    END:
        if(ret != 0) //失败
        {
            FreeMem(myp,*count);
        }
        else
        {  
            *myp3 = myp;   //成功
        }        
        return ret;
    
    }
    
    int main()
    {
        int i;
        int ret=0 ;
        char *p1="abcdef,aaa,eeeee,ffffff,a3a3a3,";
        char tmp=',';
        char **p=NULL;
        int nCount;
    
        ret=spitString4(p1,tmp,&p,&nCount);
    
        if(ret!=0)
        {
            printf("fun spiltString() err:%d 
    ",ret);
            return ret;
        }
    
        for(i=0;i<nCount;i++)
        {
            printf("%s 
    ",p[i]);
        }
    
        for(i=0;i<nCount;i++)
        {
            free(p[i]);
        }
        free(p);
    
        printf("%d 
    ",nCount);
        printf("hello...
    ");
        system("pause");
    
    }
    Stay hungry,Stay foolish
  • 相关阅读:
    e生保plus
    Exception analysis
    经验总结:5个应该避免的前端糟糕实践
    经验总结:应对中文输入法的字符串截断方案(带代码示例)
    这些年那些文
    fis入门-单文件编译之文件优化(optimize)
    《HTTP权威指南》读书笔记:缓存
    npm install —— 从一个简单例子,看本地安装与全局安装的区别
    chrome下的Grunt插件断点调试——基于node-inspector
    Yeoman的好基友:Grunt
  • 原文地址:https://www.cnblogs.com/zhesun/p/5008463.html
Copyright © 2011-2022 走看看