[問題] string轉成int

看板C_and_CPP (C/C++)作者 (阿神)時間13年前 (2012/11/02 17:53), 編輯推噓4(4019)
留言23則, 10人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 假設要處理一系列的整數,最後以一個"*"表示結束 所以我是這樣寫的 string input; while(cin >> input, input!="*") { //此時input是string,但我需要以int來處理 } return 0; 餵入的資料(Input): 123 4567 * 預期的正確結果(Expected Output): 123 4567 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) 我用兩種方法,但想知道有沒有更好的 1.用 1234=1*10^4+2*10^3+3*10^2+4*10^1 的方法轉成int int num; for(int bit=input.size() ; bit!=0 ; --bit)//input的string轉成int { num+=(input[bit-1]-48)*mee(input.size()-bit); }//mee(n)是10的n次方,等等在說明為什麼要這樣 cout << num << endl; 2.先複製到char在用函數轉成int char buf[input.size()]; strcpy(buf,input.c_str()); int num = atoi ( buf ); cout << num << endl; 補充說明(Supplement): 我是C++新手,10的n次方那邊好像不能直接打10^n,就先寫的函式將就著用 如果有板友知道不能用的原因也麻煩教我~ 雖然已經找到方法可以轉換,但第一個方法是我自己想的 有點土法煉鋼的感覺 而第二個方法,用的strcpy我看C++ Primer說是C-style函式 建議不要用 所以想知道是不是有更好的方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.19.145.249 ※ 編輯: luke90512 來自: 163.19.145.249 (11/02 17:54)

11/02 17:55, , 1F
次方可以用pow(power)函式
11/02 17:55, 1F

11/02 17:59, , 2F
2的方法可以直接int num=atoi(input.c_str());不需複製
11/02 17:59, 2F

11/02 18:02, , 3F
想請問一下,例如atoi(),c_str()我在書上都沒看過
11/02 18:02, 3F

11/02 18:03, , 4F
這類函數要去哪裡學呢?
11/02 18:03, 4F

11/02 18:06, , 5F
就找個查詢網站囉 http://www.cplusplus.com/
11/02 18:06, 5F

11/02 18:06, , 6F

11/02 18:07, , 7F
可以用 istringstream 讀字串
11/02 18:07, 7F

11/02 18:07, , 8F
感謝@@!!
11/02 18:07, 8F

11/02 18:19, , 9F
http://codepad.org/AtAJw8ku 跟第一個方法原理一樣
11/02 18:19, 9F

11/02 18:46, , 10F
那這兩種方法和lino大的方法,有什麼優缺點嗎?
11/02 18:46, 10F

11/02 18:46, , 11F
例如可以處理的長度之類的
11/02 18:46, 11F

11/02 19:02, , 12F
自己處理字串只要改個格式可能就要改東改西
11/02 19:02, 12F

11/02 19:03, , 13F
像是負數、小數點之類的
11/02 19:03, 13F

11/02 19:04, , 14F
istringstream的缺點大概就是要include吧XD
11/02 19:04, 14F

11/02 19:09, , 15F
btw, atoi(string.c_str()) 就可以了,不用再複製
11/02 19:09, 15F

11/02 20:33, , 16F
stringstream記得也可以
11/02 20:33, 16F

11/02 20:48, , 17F
1234 = ((((1)*10 + 2)*10 + 3)*10 + 4) 不用mee()
11/02 20:48, 17F

11/02 20:59, , 18F
我意思是input沒有固定,可以不斷輸入並處理,直到*停止
11/02 20:59, 18F

11/02 21:06, , 19F
boost::lexical_cast (無誤
11/02 21:06, 19F

11/02 21:06, , 20F
樓上那個好像有點難,看不懂...Orz
11/02 21:06, 20F

11/02 21:09, , 21F
C++11也有sto*家族的函式可以用 (e.g. stoi)
11/02 21:09, 21F

11/02 23:33, , 22F
strtol()不就好了。
11/02 23:33, 22F

11/03 01:20, , 23F
boost::lexical_cast最佳解無誤
11/03 01:20, 23F
文章代碼(AID): #1GavWLu2 (C_and_CPP)
文章代碼(AID): #1GavWLu2 (C_and_CPP)