回答
這確實是一個循環,無師(使用C++ 11的範圍內,基於for
,但可以很容易地重寫去無):
std::string s = "123";
int base = 10; // Must be <= 10, or the technique below won't work
int n = 0; for (char c : s) { n = n * base + (c - '0'); }
std::cout << n; // Should output 123
編輯:
一更安全,更復雜的解決方案,它將解析字符串,直到遇到非數字字符:
#include <iostream>
int convert(std::string const& s, int base)
{
int n = 0;
for (char c : s)
{
if (!isdigit(c)) { break; }
n = n * base + (c - '0');
}
return n;
}
int main()
{
std::string s = "123d";
cout << convert(s, 10) << endl; // Should output 123
}
你可能想要硬編碼base;它有點誤導,因爲它只適用於'base <= 10';任何以上和10將是':',這不是我知道的任何數字系統。 – icktoofay 2013-02-25 00:24:42
@icktoofay:我只想顯示'base'可能與10不同,但是你是對的,只有在<= 10'時纔有效。將編輯。 – 2013-02-25 00:28:46
這個解決方案很整潔,它運行良好,但是當傳遞包含非數字字符的字符串時會引起怪異。 – 2013-02-25 00:35:51
你甚至不需要兩個循環。您可以一次完成,並且在創建整數時,只需在循環結束時停止循環。這比兩個建議的解決方案都快。
這很有幫助。但我原來的問題是什麼會更快,循環或分裂。我相應地編輯了我的問題。 – Cheeku 2013-02-26 14:27:02
以初始值num零。在字符串中從左到右遍歷每個字符,將數字乘以10,添加當前數字的值。
只要使用霍納的規則。即在C中,假設刺是隻有數字:
value = 0;
for(p = str; *p; p++)
value = 10 * value + *p - '0';
一個循環,沒有除法。
我相應地修改了這個問題,因爲我想知道。如果我使用循環或分區,什麼會更快? – Cheeku 2013-02-26 14:27:40
該部門將需要一定的時間(畢竟這是一條指令),以便與需要測量的內存循環進行比較。回答這樣的問題的一個出發點是Jon Bentley在他的「編程珍珠」中引用了programs。計時程序需要一些按摩才能在當前系統上進行編譯,並調整輸出以免它們一起運行。不要忘記編譯器是聰明的,通常令人驚訝的是,在思考性能改變的代碼之前。
- 1. 速度更快:嵌套for循環還是循環連續?
- 2. 快速分裂
- 3. 速度更快:JDBC還是JNDI?
- 4. 速度更快:JMP還是一串NOP?
- 5. 讓awk快速分裂
- 6. 速度快:查詢語法與循環
- 7. 執行速度更快還是更優化? C#
- 8. 速度更快/使用更好:MySQL還是PHP md5函數?
- 9. 快速排序劃分無限循環
- 10. LINQ循環實際上更快還是僅僅是語法糖?
- 11. django是設置操作更快還是循環?
- 12. 在python中搜索的速度比嵌套循環更快
- 13. 加入Oracle時查詢速度慢,分裂成兩個查詢時速度快
- 14. 速度更快,日期時間還是時間戳?
- 15. 速度更快:Web服務還是XML服務器輸出?
- 16. 速度更快,選擇多行還是多列?
- 17. 遞歸的速度更快:javascript服務器端還是freemarker?
- 18. 速度更快:noop函數調用還是語句?
- 19. 訪問速度更快:alter + update還是create?
- 20. 學習速度更快:Django(Python)還是Ruby on Rails(Ruby)?
- 21. 速度更快 - if語句還是函數的調用?
- 22. 哪個速度通常更快,收益率還是附加值?
- 23. For循環速度
- 24. 快速基本循環
- 25. 快速NumPy的循環
- 26. 哪個更快,MogoDB聚合還是自我實現「For」循環?
- 27. 速度更快嗎?
- 28. numpy ufuncs速度vs循環速度
- 29. 循環速度升級
- 30. Java速度foreach循環
它可以完成一個循環,沒有分裂。 – Mysticial 2013-02-25 00:19:50
那就是這樣? 有一點提示就足夠了。 – Cheeku 2013-02-25 00:21:18
-1(可以回覆)寫出有意義的標題。 – 2013-02-25 00:37:00