1. 程式人生 > >45.切割字符串並精確分配內存

45.切割字符串並精確分配內存

指定位置 等於 info 勇氣 小孩 存儲 這樣的 del 如果

運行結果:

技術分享圖片

源代碼:

  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 }

45.切割字符串並精確分配內存