"Frederik Van Bogaert" <frederik.vanbogaert@student.kuleuven.be> wrote in
message news:f084mn$lbd$1@ikaria.belnet.be...
Hi! I've taken my first steps into the world of c++ by trying to write a
text adventure game. Things are proceeding fine, but there's some code
in there that isn't very well coded. More specifically, I use the
following code:
...
string word [4];
size_t pos = action.find(" ");
word[0] = action.substr (0,pos);
if (pos < action.size() - 2)
{
word[1] = action.substr(pos + 1);
}
string word1 [2];
for (int i=1;i<3;i++)
{
pos = word[i].find(" ");
if (pos == string::npos) goto skippy;
word1[i-1] = word[i].substr (0,pos);
if (pos < word[i].size() - 2)
{
word[i+1] = word[i].substr(pos + 1);
}
word[i] = word1[i-1];
}
skippy:
...
To convert a string called 'action' into the array word[4]. Is there a
way to do this more efficiently?
Thanks
Use. std::stringstream. stringstream will read using >> like std::cin,
stopping on spaces.
Output of following program is:
look
at
the
clock
on
the
wall
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
// typedef is not required, just makes it a little eaiser.
typedef std::vector<std::string> WordVec;
int main()
{
std::string action = "look at the clock on the wall";
WordVec Words;
// Following declares a stringstream Parse and initializes it to the
contents of action
std::stringstream Parse( action );
// Now we read each word out one by one til there's no more and stuff
them into our vector
std::string word;
while ( Parse >> word )
Words.push_back( word );
// At this point each word is in the vector.
for ( WordVec::iterator it = Words.begin(); it != Words.end(); ++it )
std::cout << (*it) << "\n";
std::string wait;
std::getline( std::cin, wait );
}