小筆記-C++快速分解字串
阿新 • • 發佈:2019-01-09
以前,針對分解字串的需求,總是用Qt,最近發現C++一樣的。特此記錄。
C++版
#include <iostream>
#include <vector>
#include <list>
#include <algorithm>
#include <regex>
using namespace std;
int main()
{
string s{"12,-2.3,-1.2e-3;;1023.283784,.12,-.23;"};
regex regex{"([^\\d\\.eE\\-])"};
sregex_token_iterator it{s.begin(), s.end(), regex, -1 };
list<string> words{it, {}};
vector<double> values;
for_each(words.begin(),words.end(),[&values](string v){
values.push_back(atof(v.c_str()));
});
for_each(values.begin(),values.end(),[](double v){
cout<<v<<"\n";
});
return 0;
}
Qt 版
#include <QCoreApplication>
#include <QList>
#include <QRegExp>
#include <QStringList>
#include <QTextStream>
#include <QVector>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const QString str = "12,-2.3,-1.2e-3;;1023.283784,.12,-.23;" ;
const QStringList lst = str.split(QRegExp("[^\\d\\.eE\\-]"));
QVector<double> vec;
foreach(const QString v, lst)
vec.push_back(v.toDouble());
QTextStream so(stdout);
foreach(auto v, vec)
so << v << "\n";
so.flush();
return 0;
}
輸出
12
-2.3
-0.0012
0
1023.28
0.12
-0.23
0
因此,我們在動手前,可以多搜尋一下,看看有沒有經典的實現。