【C语言提高30】二级指针强化训练[02]

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>

//主调函数分配内存
 char** spitString3(char*buf1, char c, int*count)
{
 //strcpy(buf2[0], "aaaaa");
 //strcpy(buf2[1], "bbbbbb");
 char *p = NULL, *pTmp = NULL;
 int tmpcount = 0;
 char**myp;


 //1 p和ptmp初始化
 p = buf1;
 pTmp = buf1;


 //第一遍扫描求出count //多少个逗号
 
 do
 {
  //2 检索符合条件的位置 p后移  形成差值 挖字符串
  p = strchr(p, c);
  if (p != NULL)
  {
   if (p - pTmp > 0)
   {
    strncpy(myp[tmpcount], pTmp, p - pTmp);
    myp[tmpcount][p - pTmp] = '\0';  //把第一行数据变成 C风格字符串
    tmpcount++;
    //3重新 让p和ptmp达到下一次检索的条件
    pTmp = p = p + 1;
   }
  }
  else
  {
   break;
  }
 } while (*p != '\0');


 *count = tmpcount;

 //根据多少行 精确的分配内存
 /

 //1 p和ptmp初始化
 p = buf1;
 pTmp = buf1;

 tmpcount = 0;
 myp = (char**)malloc(tmpcount*sizeof(char*));
 if (myp == NULL)
 {
  return NULL;
 }


 do
 {
  //2 检索符合条件的位置 p后移  形成差值 挖字符串
  p = strchr(p, c);
  if (p != NULL)
  {
   if (p - pTmp > 0)
   {
    int len = p - pTmp + 1;
    myp[tmpcount] = (char*)malloc(len*sizeof(char));
    if (myp[tmpcount==NULL])
    {
     return NULL;
    }

    strncpy(myp[tmpcount], pTmp, p - pTmp);
    myp[tmpcount][p - pTmp] = '\0';  //把第一行数据变成 C风格字符串
    tmpcount++;
    //3重新 让p和ptmp达到下一次检索的条件
    pTmp = p = p + 1;
   }
  }
  else
  {
   break;
  }
 } while (*p != '\0');

 *count = tmpcount;


 return myp;
}

 //主调函数分配内存
int spitString4(char*buf1, char c, char***myp3,int*count)
 {
  //strcpy(buf2[0], "aaaaa");
  //strcpy(buf2[1], "bbbbbb");
  char *p = NULL, *pTmp = NULL;
  int tmpcount = 0;
  char**myp;


  //1 p和ptmp初始化
  p = buf1;
  pTmp = buf1;


  //第一遍扫描求出count //多少个逗号
  
  do
  {
   //2 检索符合条件的位置 p后移  形成差值 挖字符串
   p = strchr(p, c);
   if (p != NULL)
   {
    if (p - pTmp > 0)
    {
     strncpy(myp[tmpcount], pTmp, p - pTmp);
     myp[tmpcount][p - pTmp] = '\0';  //把第一行数据变成 C风格字符串
     tmpcount++;
     //3重新 让p和ptmp达到下一次检索的条件
     pTmp = p = p + 1;
    }
   }
   else
   {
    break;
   }
  } while (*p != '\0');


  *count = tmpcount;

  //根据多少行 精确的分配内存
  /

  //1 p和ptmp初始化
  p = buf1;
  pTmp = buf1;

  tmpcount = 0;
  myp = (char**)malloc(tmpcount*sizeof(char*));
  if (myp == NULL)
  {
   return -2;
  }


  do
  {
   //2 检索符合条件的位置 p后移  形成差值 挖字符串
   p = strchr(p, c);
   if (p != NULL)
   {
    if (p - pTmp > 0)
    {
     int len = p - pTmp + 1;
     myp[tmpcount] = (char*)malloc(len*sizeof(char));
     if (myp[tmpcount == NULL])
     {
      return -3;
     }

     strncpy(myp[tmpcount], pTmp, p - pTmp);
     myp[tmpcount][p - pTmp] = '\0';  //把第一行数据变成 C风格字符串
     tmpcount++;
     //3重新 让p和ptmp达到下一次检索的条件
     pTmp = p = p + 1;
    }
   }
   else
   {
    break;
   }
  } while (*p != '\0');

  *count = tmpcount;
  *myp3 = myp;

  return 0;
 }


void main()
{
 int ret = 0, i = 0;
 char *p1 = "abcdef,acccd,eeee,aaaa,e3eeeee,sssss,";
 char cTem = ',';
 int nCount;

 char **p = NULL;
 
/*
 p = spitString3(p1, cTem, &nCount);

 if (p== NULL)
 {
  printf("fucn spitString() err: %d \n", ret);
  return;
 }
*/

 ret = spitString4(p1, cTem, &p, &nCount);
 if (ret == NULL)
 {

  printf("fucn spitString() err: %d \n", ret);
  return;
 }

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

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


 printf("hello...\n");
 system("pause");
 return;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值