469,642 Members | 1,217 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,642 developers. It's quick & easy.

Create a list of numbers

Hello, I'm working on my C++ homework and I have a question about the
following function.
It's part of my code the handles command line arguments. Here's the code:

static void
extract_numbers(const char* optarg, vector<string>& numbers)
{
const char* str = optarg;

while(true)
{
string s(str);
string::size_type index = s.find_first_of(',');

if(index == string::npos)
{
string temp(s.c_str(), s.length());

numbers.push_back(temp);

break;
}
else
{
string temp(s.c_str(), index);

numbers.push_back(temp);

str += (index + 1);
}
}
}

optarg points to a null-terminated string of the following form:
somenumber1,somenumber2,somenumber3
where somenumber* is a, *drumroll*, number. It needs to extract these
numbers and put them in the vector. Note that
optarg may point to anything, I haven't made any sanity checks on the input
at this point and it may also
contain only one number. My way seems to work for "friendly" input, is it ok
to hand in as it is (I need to perform better on
this assignment) or can it be improved/bug fixed?

Thanks for any help!

/ Eric
Jul 22 '05 #1
2 2534
Eric Lilja wrote:
Hello, I'm working on my C++ homework and I have a question about the
following function.
It's part of my code the handles command line arguments. Here's the code:

static void
extract_numbers(const char* optarg, vector<string>& numbers)
{
const char* str = optarg;

while(true)
{
string s(str);
string::size_type index = s.find_first_of(',');

if(index == string::npos)
{
string temp(s.c_str(), s.length());

numbers.push_back(temp);

break;
}
else
{
string temp(s.c_str(), index);

numbers.push_back(temp);

str += (index + 1);
}
}
}

optarg points to a null-terminated string of the following form:
somenumber1,somenumber2,somenumber3
where somenumber* is a, *drumroll*, number. It needs to extract these
numbers and put them in the vector. Note that
optarg may point to anything, I haven't made any sanity checks on the input
at this point and it may also
contain only one number. My way seems to work for "friendly" input, is it ok
to hand in as it is (I need to perform better on
this assignment) or can it be improved/bug fixed?


Try it with different inputs, like

,something,somethingelse
or
,,something
or
something,,
or
something,,,lastthing

If you get it all there, you're fine.

Since it's only part of the program, you are still in need to fix the
conversion later and detect any errors during that. It would be nice
if your program while detecting the error in the input knew where the
erroneous input is in the original string. If you have spare time, you
could work on that.

V
Jul 22 '05 #2

"Eric Lilja" <er*******************@yahoo.com> schrieb im Newsbeitrag
news:cl**********@news.island.liu.se...
Hello, I'm working on my C++ homework and I have a question about the
following function.
It's part of my code the handles command line arguments. Here's the code:

static void
extract_numbers(const char* optarg, vector<string>& numbers)
{
const char* str = optarg;

while(true)
{
string s(str);
string::size_type index = s.find_first_of(',');

if(index == string::npos)
{
string temp(s.c_str(), s.length());

numbers.push_back(temp);

break;
}
else
{
string temp(s.c_str(), index);

numbers.push_back(temp);

str += (index + 1);
}
}
}

Remark:
I would create a class, which is able to parse a string and seperate it into
parts.
As IMHO this task is needed very very often. Something like the split()
function in perl. We inhouse have a class named LineParser, which does this.
Whenever you want to split up strings with some seperation character using
such a spliiter class is much easier and with less probability for errors,
if the class is working properly once.
Regards
Michael
Jul 22 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

6 posts views Thread by massimo | last post: by
19 posts views Thread by Eduardo Bezerra | last post: by
7 posts views Thread by Wolfgang Kreuzer | last post: by
4 posts views Thread by tron.thomas | last post: by
3 posts views Thread by Kasrav | last post: by
reply views Thread by gheharukoh7 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.