Re: [問題] 如何把字串中的數字取出(有空格相間)

作者: littleshan (我要加入劍道社!)   2017-06-20 23:13:21
C++ 其實提供非常多高階函式把單調的迴圈操作包裝起來
以這個例子來說,切割字串可以用 istringstream 沒錯
但還可以搭配 istream_iterator 把資料流 (stream) 轉成 iterator
有了 iterator 就可以搭配所有 STL 泛型函式使用
比如說把字串切割後存進 vector:
istringstream input("1 22 333 44 5");
istream_iterator<int> begin(input);
istream_iterator<int> end;
vector<int> data;
data.insert(data.begin(), begin, end);
又,C++ 提供 std::accumulate,讓你可以把 iterator 尋訪過的每個元素加起來
這樣就完全不需要另一個 vector 來存這些數字:
istringstream input("1 22 333 44 5");
istream_iterator<int> begin(input);
istream_iterator<int> end;
cout << accumulate(begin, end, 0) << endl; // 405
只要把資料用 iterator 表示,就可以利用 STL 內大量的泛型函式
而且執行速度非常快。
※ 引述《pziyout (pziyout)》之銘言:
: : python可以把一串字串(或輸入一大段字串用空白或逗號相間),轉換後運算
: : 例如 " 10 20 30 123 " 變成
作者: a855341 (崧樓下的腳印)   2017-06-21 11:26:00
感謝L大解釋方法 我晚點才有電腦來試試看但有些東西開始看不懂了QAQ 新手上路 但還是非常感謝
作者: s25g5d4 (function(){})()   2017-06-23 03:45:00
這作法太逆天 上次在 stackoverflow 看到整個人都高潮了
作者: Killercat (殺人貓™)   2017-06-24 16:12:00
這其實算很標準做法 沒啥好逆天的,誰叫std::string連.split()這種東西都不提供 XD你去查how to split a string c++大概都會找到這方法
作者: steve1012 (steve)   2017-07-01 16:07:00
Standard library 應該要有split才對 最好Python 的全都抄來xD覺得很多部分標準實在進展太慢

Links booklink

Contact Us: admin [ a t ] ucptt.com