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!=‘\0‘);

    *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]=‘\0‘;
                tmpcount ++;
                //3重新 让p和ptmp达到下一次检索的条件
                pTmp = p = p + 1;
            }
        }
        else
        {
            break;
        }
    } while (*p!=‘\0‘);

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 \n",ret);
        return ret;
    }

    for(i=0;i<nCount;i++)
    {
        printf("%s \n",p[i]);
    }

    for(i=0;i<nCount;i++)
    {
        free(p[i]);
    }
    free(p);

    printf("%d \n",nCount);
    printf("hello...\n");
    system("pause");

}
时间: 2024-10-26 00:05:37

C提高_day03_两个辅助指针变量挖字符串(强化4)的相关文章

C提高_day03_两个辅助指针变量挖字符串(强化3)

#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h> //两个辅助指针变量挖字符串, 的第三种内存模型 //指针做函数参数 int spitString4(char *buf1,char c,char ***myp3,int *count) //**pp二级指针做输入 { char *p=NULL, *pTmp = NULL; int tmpc

C提高_day03_两个辅助指针变量挖字符串(强化2)

#include <stdlib.h> #include <string.h> #include <stdio.h> //两个辅助指针变量挖字符串, 的第三种内存模型 char ** spitString3(char *buf1,char c,int *count) //**pp二级指针做输入 { char *p=NULL, *pTmp = NULL; int tmpcount = 0; char **myp=NULL; //1 p和ptmp初始化 p = buf1;

两个辅助指针变量截取字符串

如题:有一个字符串符合以下特征(”abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";) 思路:用一个二维数组来存储截取后的字符串,以'  ,'作为分隔符,截取完一个字符串后,更新当前的位置.直到'  \0  '. 代码: 1 #include <stdlib.h> 2 #include <string.h> 3 #include <stdio.h> 4 int splitString(const char *buf1, char c

编程题:用指针变量输出字符串

#include<stdio.h> void main() {  char *string="Hello"; printf("%s\n",string); } 字符串指针变量的介绍: 运行结果: 编程题:用指针变量输出字符串,布布扣,bubuko.com

关于指针 用字符数组,字符指针变量输入字符串 动态为字符型指针变量分配内存

#include <stdio.h> #include <iostream> #include<math.h> using namespace std; int main() { //声明字符型数组和指针变量 char str[10]; char *strip=str; //输入输出 cout<<"str="; cin>>str; //用字符数组输入字符串 cout<<"str="<<

C提高_day03_玩转多级指针

#include <stdlib.h> #include <string.h> #include <stdio.h> char **getMem51(int num) { int i = 0; char **p2 = NULL; p2 = (char **)malloc(sizeof(char *) * num); if (p2 == NULL) { return NULL; } for (i=0; i<num; i++) { p2[i] = (char *)ma

字符串指针变量与字符数组的区别

使用字符串指针变量与字符数组的区别 (1)分配内存 设有定义字符型指针变量与字符数组的语句如下: char *pc ,str[100]; 则系统将为字符数组str分配100个字节的内存单元,用于存放100个字符.而系统只为指针变量pc分配4个存储单元,用于存放一个内存单元的地址.(2)初始化赋值含义 字符数组与字符指针变量的初始化赋值形式相同,但其含义不同.例如: char str[ ] ="I am a student ! " ,s[200]; char *pc="You

【C语言】用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数

<pre name="code" class="cpp">//用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数 #include <stdio.h> int max(int x,int y) { return (x>y)?x:y; } int min(int x,int y) { return (x>y)?y:x; } int main() { int (*p)(int,int); int

编程题:指针变量作函数参数,将两个整数按由大到小的顺序输出。

分析:通过指针变量作函数参数,无需返回值和全局变量,主调函数就可以使用被调用函数改变的值. #include<stdio.h> void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; } void main() { int a=3,b=4; int *ptr1,*ptr2; ptr1=&a;ptr2=&b; if(a<b) swap(ptr1,ptr2); printf("%d,%d\n",