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