[問題] 請問關於字串分解的問題

看板C_and_CPP作者 (仁者無敵)時間15年前 (2010/10/15 17:13), 編輯推噓5(5012)
留言17則, 4人參與, 最新討論串1/1
各位大大,我想要從硬碟讀入一個文字檔.txt, 內容是一篇英文的文章,或是英文的歌詞, 希望透過程式將每個英文單字分開, 我利用scanf的話往往標點符號會跟著單字一起走, 有沒有什麼方法把符號都去掉,只留英文單字呢? 另外一個問題是,能否做到把長度都為1的單字存在一起, 長度都為2的單字存在一起,依此類推。 謝謝各位大大。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.184.127

10/15 17:15, , 1F
要用現成的函數,就用最方便的,支援正規表達式的那些。
10/15 17:15, 1F

10/15 17:15, , 2F
要自己寫的話,每次讀一行,再逐字讀取
10/15 17:15, 2F

10/15 17:16, , 3F
遇到值介於 'a'~'z' 開頭的就開始抓單字,一直抓到非字母
10/15 17:16, 3F

10/15 17:17, , 4F
(欸,還有大寫)
10/15 17:17, 4F

10/15 17:37, , 5F
scanf("%[a-z|A-Z]", buffer); 只抓a-z, A-Z
10/15 17:37, 5F

10/15 17:41, , 6F
scanf("%[^.,?!]",buffer); 濾除.,?! 作斷點
10/15 17:41, 6F
這個方法好像會卡住,一直重複抓同一個單字。 而且濾除的部分,如果不確定到底會出現哪些符號,要怎麼一一列出呢?

10/15 17:42, , 7F
請愛用 perl (誤)
10/15 17:42, 7F

10/15 17:42, , 8F
度一樣存在一起?怎麼存?存到檔案嗎?還是 HEAP?
10/15 17:42, 8F
不知道能不能用二維陣列存?譬如說A[1][]就是長度1的那些字串,A[2][]就是長度2的?

10/15 17:47, , 9F
用vector吧
10/15 17:47, 9F

10/15 17:49, , 10F
用vector比較實際.不然很煩人
10/15 17:49, 10F

10/15 17:51, , 11F
那你可以用確定有哪些char. %[a-z|A-Z]
10/15 17:51, 11F
我寫了一個簡單的程式跑了一下,他會一直卡在第一個英文單字就無線迴圈了, 不知道是哪裡出錯了? FILE *inPtr; inPtr=fopen("c:\input.txt","r"); while(!feof(inPtr)){ fscanf(inPtr,"%[a-z|A-Z]",buffer); printf("%s\n",buffer); }

10/15 18:04, , 12F
嗯,似乎真有些問題,晚些回來研究..
10/15 18:04, 12F

10/15 18:10, , 13F
fscanf(inPtr,"%*[^a-zA-Z]%[a-z|A-Z]",buffer);
10/15 18:10, 13F
大大我用了這行,變成完全沒東西印出來0.0 ※ 編輯: cheatx 來自: 220.136.184.127 (10/15 18:17)

10/15 18:23, , 14F
scanf真是神奇的東西丫 = =
10/15 18:23, 14F

10/15 22:36, , 15F
fscanf(inPtr,"%[a-z|A-Z]%*[^a-zA-Z]",buffer);
10/15 22:36, 15F

10/15 22:37, , 16F
我只是想表達,你沒把其他的字元吃掉,file pointer不會動
10/15 22:37, 16F

10/16 01:34, , 17F
不過是初學者 還是用 for 一個字一個字吃掉吧...XDD
10/16 01:34, 17F
文章代碼(AID): #1Ck1iftM (C_and_CPP)