[問題] bitset的使用方式

看板C_and_CPP (C/C++)作者 (是黑是白)時間14年前 (2012/01/04 23:31), 編輯推噓3(3035)
留言38則, 9人參與, 最新討論串1/2 (看更多)
開發平台(Platform): DEV C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 有用到bitset 問題(Question): 有點崩潰.. 由於需要將2進位字串換直接轉成10進位的整數 所以最後選擇用bitset 參考了文章#1BvInMXs 以及james732大的推文 但對bitset的還是不了解,一直出現bug.. 餵入的資料(Input): 00_0000_10 預期的正確結果(Expected Output): 2 錯誤結果(Wrong Output): 有時候會出現↓ This application has required the Runtime to terminate it in an unusual way. 即使沒出現 答案也是錯的 囧 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/yIWoC 補充說明(Supplement): 這個程式是要將二進位字串轉成10進位整數 其中輸入的資料中,底線'_'要忽略掉,ex 00_0001_00 要輸出4 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.255.46.147

01/04 23:32, , 1F
麻煩神人解惑 我搞了一個晚上還是無解QQ
01/04 23:32, 1F
※ 編輯: bwtalk 來自: 111.255.46.147 (01/04 23:37)

01/04 23:37, , 2F
0與1的長度是固定的嗎?
01/04 23:37, 2F

01/04 23:38, , 3F
對阿 固定的10個0與1 加上底線就是12個
01/04 23:38, 3F

01/04 23:42, , 4F
但你for只跑7次耶
01/04 23:42, 4F

01/04 23:43, , 5F
你輸入的有10個,你char[]只有9隔
01/04 23:43, 5F

01/04 23:44, , 6F
況且不用這麼麻煩. address設為0, 每讀進一個字, 若是'_'
01/04 23:44, 6F

01/04 23:45, , 7F
你把bitset改成10就可以了
01/04 23:45, 7F

01/04 23:45, , 8F
就忽略, 否則 address*=2 再 +=讀入的1或0就好了
01/04 23:45, 8F
謝謝bibo大 如果確定bitset無法的話.. 我就改用你的方法

01/04 23:45, , 9F
因為有一次已經先做了喔 在第17行
01/04 23:45, 9F

01/04 23:45, , 10F
你只有給8當然最後兩個會被捨去掉,讀不進去
01/04 23:45, 10F

01/04 23:47, , 11F
你都用c++了,讀檔可以用ifstream一次讀入一整串存
01/04 23:47, 11F

01/04 23:47, , 12F
存入string,再把"_"刪除就好,接著整個丟入bitset
01/04 23:47, 12F

01/04 23:47, , 13F
這樣會容易多
01/04 23:47, 13F
抱歉我剛剛說錯了...........................我到底在幹嘛Orz 輸入資料應該是這樣子:00_0000_10 沒加底線長度是8,加了是10 正確的輸出應該是2 改完迴圈後答案OK! 最後一個小問題是 但是為什麼我陣列長度設定9 但印出來卻是000000100000000000.. ※ 編輯: bwtalk 來自: 111.255.46.147 (01/05 00:12)

01/05 00:06, , 14F
http://ideone.com/p6yNr 大概是這樣子
01/05 00:06, 14F

01/05 00:12, , 15F
http://ideone.com/Tv1Ni 我的是這樣,但我想說刪除
01/05 00:12, 15F

01/05 00:13, , 16F
'_'那邊一定有更好的寫法,但我想不到...麻煩指教
01/05 00:13, 16F

01/05 00:15, , 17F
如果用 union 是不是會跟實作方式有關呢?
01/05 00:15, 17F

01/05 00:18, , 18F
為什麼會跟union有關係...?
01/05 00:18, 18F

01/05 00:21, , 19F
你說印出什麼會是000000100000000000..?給個code
01/05 00:21, 19F
code是http://ideone.com/TxJ5l 輸入資料是00_0000_10 cout<<addrTemp<<endl;這行會輸出000000100000000000 但我一開始設定長度是9.. 怎麼會這樣- - ※ 編輯: bwtalk 來自: 111.255.46.147 (01/05 00:25)

01/05 00:25, , 20F
我想說不知道可不可用 1bit*8 array 跟unsigned char
01/05 00:25, 20F

01/05 00:26, , 21F
感謝james732大與diabloevagto大!! 你們的code都好漂亮..
01/05 00:26, 21F

01/05 00:28, , 22F
然後'_'跳過,其餘char就扣掉'0'再塞,不知道對不對???
01/05 00:28, 22F

01/05 00:28, , 23F
char addrTemp[9]; 改成 char addrTemp[10] = {0};
01/05 00:28, 23F

01/05 00:28, , 24F
char addrTemp[9]={'\0'};你的char[]結尾沒有'\0'
01/05 00:28, 24F

01/05 00:30, , 25F
char[9]就好了,他輸入的只有8個
01/05 00:30, 25F

01/05 00:30, , 26F
樓上是對的,不需要改長度 XD [9] 就夠了
01/05 00:30, 26F

01/05 00:30, , 27F
j大~我code刪除'_'有沒有更好的寫法~_~
01/05 00:30, 27F

01/05 00:30, , 28F
我感覺那樣寫挺醜的...
01/05 00:30, 28F

01/05 00:31, , 29F
格式固定的話,想到用 sscanf 去抓,但也沒比較簡單
01/05 00:31, 29F

01/05 00:43, , 30F
沒問題了~ 非常感謝!!!<(_ _)>
01/05 00:43, 30F

01/05 01:30, , 31F
用C就用的徹底一點 http://ideone.com/eazBD ...
01/05 01:30, 31F

01/05 01:47, , 32F

01/05 01:56, , 33F
XDD 我被誤導了, 不用 bitset http://bit.ly/xiygGg
01/05 01:56, 33F

01/05 02:01, , 34F
01/05 02:01, 34F

01/05 08:39, , 35F
版大的code真的太漂亮了!
01/05 08:39, 35F

01/05 09:24, , 36F
l大的寫法要c++11才編得過
01/05 09:24, 36F

01/05 10:37, , 37F
有nullptr的關係吧
01/05 10:37, 37F

01/05 10:46, , 38F
sto___系列是11才有的
01/05 10:46, 38F
文章代碼(AID): #1F172zNo (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1F172zNo (C_and_CPP)