線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1912
推到 Plurk!
推到 Facebook!

如何在一個文章中找每一段的第一個字,以及處理換行後的空白

答題得分者是:RedSnow
Miki-lion
中階會員


發表:90
回覆:180
積分:54
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-07 10:34:04 IP:218.162.xxx.xxx 未訂閱
平台:C/C++/Buidler都可以 目標1:刪除一個文章當中的所有空白,但是句子與句子間至少留一個起來      也就是說困難是在每一段的第一個字如果是空白就必須刪除 問題1:如何知道用陣列讀取文章近來後,每一段的第一個字的陣列位址       (我想到的是換型控制字元後就是每一段的第一個,當然除了陣列[0])    目標2:可以單獨只刪除"換行",這比較簡單,只是我不知道怎去判斷換行 問題2:我想的方法是判斷換行的ASCII碼,但是多少我不知道    問題3:總結以上,小弟認為要單獨做到刪除一個文章當中的所有空白,       但是句子與句子間至少留一個起來,每一段的第一個字如果是空白       就必須刪除,並且可以單獨判斷換行的程式寫法是這樣的    1.判斷陣列[0] 2.判斷換行前的所有空白 3.判斷換行 4.判斷換行後的空白                       請高手指正一下 在附上我自己寫的刪空白程式 (Bug是在每段的第一個空白無法刪除,換行沒有單獨的刪除功能,只能一起跟空白刪除) #include #include int main(void) { int i,count=0; char word[5000]={'\0'}; FILE*op; op=fopen("space.txt","r"); while(!feof(op)){ fscanf(op,"%c",&word[count]); count++; } for(i=0;i 執行後
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-07 13:06:58 IP:218.19.xxx.xxx 未訂閱
Miki-lion 您好:    建議您改用 AnsiString 來處理,檔案可由 TMemo 或 TStringList 來讀取,然後使用 Trim() 與 StringReplace() 來代換掉空白字元,例如:
Memo1->Lines->LoadFromFile("space.txt");
AnsiString tmp = Memo1->Text;
// 去除所有換行字元,使整個檔案變成一行文字資料
tmp = StringReplace(tmp, "\r\n", "", TReplaceFlags()<Text = tmp;
若要處理其它字元,可比照上述方式辦理。 如果您需要保留各行的獨立性,那麼就改成用迴圈來處理:
Memo1->Lines->LoadFromFile("space.txt");
AnsiString tmp;
for(int i=0; iLines->Count; i  ){
    tmp = Memo1->Lines->Strings[i];
    tmp = tmp.Trim();  // 清除首尾的空白字元
    tmp = StringReplace(tmp, "\t", " ", TReplaceFlags()<Lines->Strings[i] = tmp;
}
發表人 - RedSnow 於 2005/05/07 13:19:17
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-08 23:42:17 IP:218.168.xxx.xxx 未訂閱
Miki-lion您好:    PO程式碼的方式請參考版規說明,煩請修改謝謝您的配合 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58991
accepter
一般會員


發表:15
回覆:10
積分:5
註冊:2005-05-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-09 08:27:02 IP:140.109.xxx.xxx 未訂閱
會不會是指字被擋去一半呢?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-09 20:22:21 IP:61.140.xxx.xxx 未訂閱
Miki-lion 您好:    我剛才在另一篇討論中,發現自己的處理程序有盲點,如果您打算接受我的建議,使用 StringReplace() 函式來過濾空白字元的話,請將那兩行連續過濾空白字元的 StringReplace() 敘述改成如下所示,以確保任意數量的空白字元被過濾成單一空白字元:
while (tmp.Pos("  ") != 0) {  // 檢查字串是否含有連續兩個空白字元?
    tmp = StringReplace(tmp, "  ", " ", TReplaceFlags()<
系統時間:2024-05-17 18:19:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!