zoukankan      html  css  js  c++  java
  • 45.切割字符串并精确分配内存

    运行结果:

    源代码:

      1 #define _CRT_SECURE_NO_WARNINGS
      2 #include <stdio.h>
      3 #include <stdlib.h>
      4 #include <string.h>
      5 
      6 //根据')'数量判断数据有多少行
      7 int getcharnum(char *str, char ch)
      8 {
      9     int num = 0;
     10     //strchr返回第一个找到的地址
     11     char *p = strchr(str, ch);
     12     while (p != NULL)
     13     {
     14         num++;
     15         p = strchr(p + 1, ch);
     16     }
     17 
     18     return num;
     19 
     20 }
     21 
     22 //删除字符,轮询法
     23 void deletech(char *str,char ch)
     24 {
     25     //备份地址
     26     char *pstr = str;
     27     while (*str != '')
     28     {
     29         //等于就赋值前进,不等于就不赋值前进
     30         if (*str != ch)
     31         {
     32             *pstr = *str;
     33             pstr++;
     34             str++;
     35         }
     36         else
     37         {
     38             str++;
     39         }
     40     }
     41     *pstr = 0;
     42 }
     43 
     44 void main()
     45 {
     46     //未经过处理的字符串
     47     char str[2048]= "我们还是当朋友好了(其实你还有可以利用的价值)
     48         我想我真的不适合你(我根本就不喜欢你!)
     49         其实你人真的很好(可是我不想和你在一起)
     50         你人真的很好(我是真的不想和你在一起)
     51         你人真的真的很好....真的(猪头, 离我远一点!)
     52         我暂时不想交男朋友(闪边啦!你还不到我心中帅哥标准的一半)
     53         我不想伤害我们之间的友谊(我们之间也只会有友谊)
     54         我心中牵挂着一个人(那个人是我专门为你这种人虚构的)
     55         我从来没想过这个问题(这是根本不可能的.还用想吗 ? )
     56         我不适合当个情人(废话, 没人会适合当你的情人的)
     57         你给我一段时间考虑(不给我时间, 我怎么溜啊)
     58         你的条件真的很好(可是还没好到我想要的地步)
     59         可是这样的感觉好怪(你这丑八怪, 怪到这样还想吃天鹅肉 ? )
     60         你的温柔我会铭记在心的(拜托, 情圣!光温柔是没用的, 还要有钱!)
     61         其实我一直没勇气接受你(看到你差点吓死, 哪还有勇气 ? )
     62         你真的很可爱(你真的很幼稚)
     63         你真的是超级可爱啦(猪头, 不要象小孩那样缠着我!)
     64         .遇到你, 总会让我重温童年的快乐(就象阿姨遇到小弟弟那样)
     65         我们应该给彼此一点缓冲时间(给你时间快滚, 再不走我要翻脸啦!)
     66         别人都说你条件不错啊(可我从来没这样认为!)
     67         如果我们早点认识就好了(可以让你早点觉悟!)
     68         别急嘛, 我们可以做朋友(趁这个时候我要找到我的白马王子啊~)";
     69 
     70     //根据')'个数获取一共有多少行
     71     int num = getcharnum(str, ')');
     72     printf("一共有%d行
    
    ", num);
     73 
     74     char **strall;//二级指针存储数据
     75     strall = (char **)malloc(sizeof(char *)*num);//分配内存,一共有多少行
     76 
     77     //i是下标,strall[i]
     78     int i = 0;
     79     //strtok:从指定位置开始,往后找到指定字符,并赋值为''
     80     for (char *pos = strtok(str, ")"); pos != NULL; pos = strtok(pos + strlen(pos)+1, ")"))
     81     {
     82         //分配内存并且拷贝
     83         strall[i] = (char *)malloc(sizeof(char)*strlen(pos));
     84         strcpy(strall[i], pos);
     85         //数据清洗,删除'	'和'('
     86         deletech(strall[i], '	');
     87         deletech(strall[i], '(');
     88         //下标增加
     89         i++;
     90     }
     91 
     92     //输出
     93     for (int i = 0; i < num; i++)
     94     {
     95         printf("%s
    ", strall[i]);
     96     }
     97     
     98     printf("%s", str);
     99 
    100     system("pause");
    101 }
  • 相关阅读:
    Python—re模块
    Python—json模块
    Python—sys模块介绍
    Python—os模块介绍
    Python—randonm模块介绍
    Python—time模块介绍
    Python—包介绍
    Python—模块介绍
    Python—装饰器
    jvm、jre、jdk
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8360443.html
Copyright © 2011-2022 走看看