[問題] 用strtok計算重複字數

看板C_and_CPP (C/C++)作者 (超級研究生)時間16年前 (2010/04/19 13:06), 編輯推噓5(509)
留言14則, 3人參與, 最新討論串1/1
遇到的問題: (題意請描述清楚) 各位程式高手好,小弟資質駑鈍,又來向前輩們請教了。 這次我想寫一個計算字數的程式, 但特別的是,這是要計算重複字數的。 比如說當我給定一個句子: "I can can a can" (我會開罐頭XD) 那程式就要顯示" can: 3 " ("can"出現3次!) 無奈的是,程式跑到一半就當掉,根本就還沒跑到計算次數的部份 另外,計算次數的部份也寫錯,但也不知道該怎麼做 請各位大大指點一條明路吧!謝謝! 希望得到的正確結果: 顯示重複出現的字和次數 程式跑出來的錯誤結果: 編繹成功,但跑的時候會當掉 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) Dev-C++ 有問題的code: (請善用置底文標色功能) #include <iostream> using std::cin; using std::cout; using std::endl; #include <cstring> using std::strtok; using std::strcpy; int main() { char sentence[] = "I can can a can"; char *tokenPtr; char *s1[32]; char *s2[32]; char *repeatWord[16]; //重複的字 int repeatNo[16]; //重複次數 tokenPtr = strtok( sentence, " " ); //做出用來比較的字元指標陣列 int i = 0; while ( tokenPtr != NULL ) { strcpy(s1[i], tokenPtr); strcpy(s2[i], tokenPtr); tokenPtr = strtok( NULL, " " ); i++; } //計算次數 int z = 0; for ( int j = 0; j < i-1; j++ ) { for ( int k = 0; k < i; k++ ) { if ( strcmp(s1[j], s2[k]) == 0 && j != k ) { strcpy( repeatWord[z], s1[j] ); z++; } } } system("pause"); return 0; } 補充說明: 順便再問一下,如果句子中有標點符號的話,要怎麼消去呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.206.28

04/19 13:09, , 1F
s1, s2只是char*的陣列, 沒有實體空間, 所以不能
04/19 13:09, 1F

04/19 13:09, , 2F
做 strcpy(s1[i], tokenPtr); 這種copy....
04/19 13:09, 2F

04/19 13:10, , 3F
詳細請參考置底十二宮第五宮....XD
04/19 13:10, 3F
喔不…我把 char *s1 改成 char s1 沒有用 把strcpy改成 s1[i] = tokenPtr 也沒用……囧 字串快把我搞瘋了 ※ 編輯: graduateme 來自: 140.115.206.28 (04/19 13:51)

04/19 13:57, , 4F
你寫程式是瞎拼亂湊的還是搞懂你想寫什麼程式又該怎麼寫
04/19 13:57, 4F

04/19 13:58, , 5F
s1[i], s2[i] 改成 = tokenPtr 是有用的, 但還有
04/19 13:58, 5F

04/19 13:58, , 6F
才合乎你要的邏輯的?? 已經告訴你置底第五戒了, 剩下的
04/19 13:58, 6F

04/19 13:58, , 7F
strcpy( repeatWord[z], s1[j] );
04/19 13:58, 7F

04/19 13:58, , 8F
就你自己去搞懂它, 或者再找書學懂從小範例練習好....
04/19 13:58, 8F

04/19 13:58, , 9F
知道為什麼有用, 跟程式要有甚麼行為, 才能解決你的問題
04/19 13:58, 9F

04/19 13:59, , 10F
我又跟 VictorTom 互相斷了 >//////<
04/19 13:59, 10F

04/19 13:59, , 11F
(羞) (大誤XD)
04/19 13:59, 11F

04/19 14:06, , 12F
仔細看一下的確還差repeatWord[]有問題, 不過z似乎忘了
04/19 14:06, 12F

04/19 14:08, , 13F
上面後句推錯了, 不是z, 是repeatNo[]還沒存起來:)
04/19 14:08, 13F

04/20 17:33, , 14F
這...寫出來應該跟題意完全不同吧...囧?
04/20 17:33, 14F
文章代碼(AID): #1Bo-I-gw (C_and_CPP)
文章代碼(AID): #1Bo-I-gw (C_and_CPP)