Re: Parsing Numeric Data
On Thu, 2012-11-08, Mike Copeland wrote:
The function below (parseNum) seems convoluted and possibly
faulty...although it seems to work. In the code invocation (far below)
the data is real-world, and I wish to parse only the first 6 numeric
values. The number of values to be parsed varies, but there is always a
"termination value" of some alphabetic value or end-of-line. Thus, I
want this logic to act as though it's a variable-value "scanf".
Please advise if there's a "cleaner" way to do this. TIA
typedef vector<string> TOKENS1; // parsing structures
TOKENS1 tokArray;
size_t parseNum(string line) // Parse numeric value(s)
{
Why not just return a vector or numbers, and why not pass the line as
const reference?
I have a feeling I posted this the other week, but anyway ... this is
untested and probably not correct, but it's not much more complicated
than this. You can fix it up. Don't neglect to read the strtoul()
documentation carefully.
vector<unsigned> parseNum(const string& line)
{
const char* p = line.c_str();
vector<unsigned> acc;
while(1) {
char* end;
unsigned n = strtoul(p, &end, 10);
if(end==p) break;
acc.push_back(n);
if(!*end || !isspace(*end)) break;
p = end;
}
return acc;
}
/Jorgen
--
// Jorgen Grahn <grahn@ Oo o. . .
\X/ snipabacken.se> O o .