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 }
  • 相关阅读:
    Linux编程 22 shell编程(输出和输入重定向,管道,数学运算命令,退出脚本状态码)
    mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)
    mysql 开发进阶篇系列 45 物理备份与恢复(xtrabackup 安装,用户权限,配置)
    mysql 开发进阶篇系列 44 物理备份与恢复( 热备份xtrabackup 工具介绍)
    Linux编程 21 shell编程(环境变量,用户变量,命令替换)
    Linux编程 20 shell编程(shell脚本创建,echo显示信息)
    mysql 开发进阶篇系列 43 逻辑备份与恢复(mysqldump 的基于时间和位置的不完全恢复)
    Linux编程 19 编辑器(vim 用法)
    (网页)angularjs中的interval定时执行功能(转)
    (网页)在SQL Server中为什么不建议使用Not In子查询(转)
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8360443.html
Copyright © 2011-2022 走看看