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 != ‘\0‘)
 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行\n\n", num);
 73
 74     char **strall;//二级指针存储数据
 75     strall = (char **)malloc(sizeof(char *)*num);//分配内存,一共有多少行
 76
 77     //i是下标,strall[i]
 78     int i = 0;
 79     //strtok:从指定位置开始,往后找到指定字符,并赋值为‘\0‘
 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         //数据清洗,删除‘\t‘和‘(‘
 86         deletech(strall[i], ‘\t‘);
 87         deletech(strall[i], ‘(‘);
 88         //下标增加
 89         i++;
 90     }
 91
 92     //输出
 93     for (int i = 0; i < num; i++)
 94     {
 95         printf("%s\n", strall[i]);
 96     }
 97
 98     printf("%s", str);
 99
100     system("pause");
101 }

原文地址:https://www.cnblogs.com/xiaochi/p/8360443.html

时间: 2024-11-06 07:28:08

45.切割字符串并精确分配内存的相关文章

49.大量qq号及qq密码挖掘到结构体并实现精确分配内存以及快速排序

原数据: 处理后的数据: 完整代码: 1 //思路; 2 //数据清洗(把空格替换成'\0') -> 精确获取每一行(要提前获取source的总长度) -> 获取出每一行再精确分割并把分割后的数据赋给结构体 3 4 #define _CRT_SECURE_NO_WARNINGS 5 #include <iostream> 6 #include <stdlib.h> 7 #include <string.h> 8 9 //要被挖掘的数据 10 char str

Python用特殊符号切割字符串并生成list(简单)

采用re模块,可以指定字符进行切割,例如切割IP地址: 1 import socket 2 import re 3 localIP = socket.gethostbyname(socket.gethostname())#这个得到本地ip 4 a = re.split('[.]', localIP) 5 print(a) 6 7 ['172', '18', '4', '242']

Delphi 的内存操作函数(1): 给字符指针分配内存

马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemo

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

#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="<<

Delphi 的内存操作函数(1): 给字符指针分配内存( 给字符指针(PChar、PWideChar、PAnsiChar)分配内存最佳的选择是StrAlloc。分配内存的时候会对字符串进行初始化)

马上能想到的函数有: GetMem AllocMem ReallocMem FreeMem GetMemory ReallocMemory FreeMemory New Dispose NewStr DisposeStr StrNew StrAlloc StrDispose GlobalAllocPtr GlobalFreePtr WideStrAlloc AnsiStrAlloc StrDispose Move MoveMemory CopyMemory ZeroMemory FillMemo

在堆内存中存放十个字符串并输出 堆栈溢出时退出程序

1 # include <stdio.h> 2 # include <stdlib.h> 3 4 # define NUM 10 5 6 int main() 7 { 8 char *str[NUM]; /* 定义一个字符性的指针数组 */ 9 int t; 10 11 /* 为数组中的每个指针分配内存 */ 12 for (t = 0; t<NUM; t++) 13 { 14 if ((str[t] = (char *)malloc(128)) == NULL) 15 {

记一次tcmalloc分配内存引起的coredump

现象 线上的服务出现coredump,堆栈为: #0 0x000000000045d145 in GetStackTrace(void**, int, int) () #1 0x000000000045ec22 in tcmalloc::PageHeap::GrowHeap(unsigned long) () #2 0x000000000045eeb3 in tcmalloc::PageHeap::New(unsigned long) () #3 0x0000000000459ee8 in tc

c malloc分配内存

php中的内存分配有用类似emalloc这样的函数,emalloc实际上是C语言中的malloc的一层封装,php启动后,会向OS申请一块内存,可以理解为内存池,以后的php分配内存都是在这块内存池中进行的,以至于efree,也不会向OS退回内存,而只是设置标志位,标识efree这块内存不再使用了,这样做的好处是,速度快,避免系统调用,因为频繁的从用户态和内核态之间的切换是很费CPU的. C语言的malloc函数的后面是glibc(内存管理系统) , 前段时间在看到php内存分配时,看到了ema

C++程序如何精确查找内存泄漏

一.前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成"统一"的标准.而在Windows平台,服务器和客户端开发人员惯用的调试方法有很大不同.下面结合我的实际经验,整理下常见定位内存泄漏的方法. 注意:我们的分析前提是Release版本,因为在Debug环境下,通过VLD这个库或者CRT库本身的内存泄漏检测函数能够分析出内存泄漏,相对而言比较简单.而服务器有很多问