[問題] 關於C語言計算字串中字元數量的問題

看板C_and_CPP作者 (蘆洲小飛俠)時間12年前 (2011/12/30 19:59), 編輯推噓2(2018)
留言20則, 5人參與, 最新討論串1/1
題目是在DOS輸入:main derabcccac 結果: d:1 e:1 r:1 a:2 b:1 c:4 我的CODE是這樣寫 #include <stdio.h> #include <string.h> int main(int argc, char ** argv) { int a=0,i,count=0; int len = strlen(argv[1]); for(i=0;i<len;i++){ for(int j=0;j<len;j++){ if(argv[1][i]==argv[1][j]) count++; } printf("%c:%d\n",argv[1][i],count); count = 0; } return 0; } 得到的結果是 d:1 e:1 r:1 a:2 b:1 c:4 c:4 c:4 a:2 c:4 想了很久不知道要怎麼判斷是否已經輸出過了 請各位大大指點一下方向 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.68.99

12/30 20:03, , 1F
依字母順序印出次數?
12/30 20:03, 1F

12/30 20:04, , 2F
對 依照輸入的字母順序
12/30 20:04, 2F

12/30 20:07, , 3F
我的中文 跟 你的中文 分處在兩個平行世界
12/30 20:07, 3F

12/30 20:14, , 4F
ex 執行main a121a 結果:a=2換行 1=2換行 2=1換行
12/30 20:14, 4F

12/30 20:17, , 5F
我想了一個有趣的方法..
12/30 20:17, 5F

12/30 20:17, , 6F
for(k=0;k<i;++k) if(argv[1][k]==argv[i][k]) 算過了.
12/30 20:17, 6F

12/30 20:18, , 7F
argv[1][k]==argv[1][i] , 改這樣才對.
12/30 20:18, 7F

12/30 20:19, , 8F
這方法效率很低,(好的先保留),好奇 x 大有趣方法為何..
12/30 20:19, 8F

12/30 20:27, , 9F
照樓上的方法改了 好像不對
12/30 20:27, 9F

12/30 20:37, , 10F
靈機一動搞了個bitwise法 http://codepad.org/xbD550xI
12/30 20:37, 10F

12/30 20:38, , 11F
其實只是質數篩法變形(遮臉
12/30 20:38, 11F

12/30 21:49, , 12F
若是我的話就會掃過一次 記錄每個字元和出現次數的mapping
12/30 21:49, 12F

12/30 21:50, , 13F
順便記錄字元首次出現的順序 再照此順序把mapping印出來就好
12/30 21:50, 13F

12/30 21:54, , 14F
當然如果有什麼神速的方法我就不清楚了XD
12/30 21:54, 14F

12/30 22:03, , 15F
我是直接開二個 array..
12/30 22:03, 15F

12/30 22:03, , 16F
還要自己寫資結就懶了 不然C++有現成的map科科
12/30 22:03, 16F

12/30 22:04, , 17F
最快就tree而已吧 不然自製sort 複雜度也差不多而已@@
12/30 22:04, 17F

12/30 22:10, , 18F
tree 可能不是最快的..
12/30 22:10, 18F

12/30 22:10, , 19F
12/30 22:10, 19F

12/30 22:27, , 20F
直接把字元轉成unsigned char當index就好 反正通常不會很大..
12/30 22:27, 20F
文章代碼(AID): #1E_QUPSb (C_and_CPP)