   Random order
  Hello!I have written an routine to random the order of strings.Look hereinput: 1A 2B 3C 4Doutput: 1A 4D 3C 2BHere is the function   // ==================================std::string RandomOrder(std::string Input){//string input = "1A 2B 3C 4D";  std::stringstream ss(Input);std::stringstream result_ss;std::vector<std::string> tokens;  while (ss.good()) {    std::string text;ss >> text;tokens.push_back(text);}std::random_shuffle(tokens.begin(), tokens.end());std::copy(tokens.begin(), tokens.end(), std::ostream_iterator<std::string>(result_ss, " "));std::string Ausgabe; = result_ss.str();return Ausgabe;}But i have one problem with it. There once there are two spaces in the output (1A  4D 3C 2B). How can i fix this?Thanks, Christian 
  I can''t see the problem. But here''s a suggestion for compacter definition. std::string RandomOrder(std::string Input){  using namespace std;  stringstream ss(Input);  stringstream result_ss;  istream_iterator<string> beg(ss), end;  vector<string> tokens(beg, end);  random_shuffle(tokens.begin(), tokens.end());  copy(tokens.begin(), tokens.end(), ostream_iterator<string>(result_ss, " "));  return result_ss.str();}By the way, it will always have an extra space at the end."1A 4D 3C 2B " ;  Thanks.. i have added code to trim the right side. ;  By the way, here''s a useful #define:#define ALL(__xix__) __xix__.begin(), __xix__.end()  It allows to shorten a lot of your code.random_shuffle(ALL(tokens));  Makes it more readable too. ;  The overloaded version of std::random_shuffle() that you are using uses an internal random number generator, and it may not be very random. Make a small program to exercise the function and you will see that the "random" numbers will be the same every time. The other overloaded version, though, allows you to pass a random number generator in the form of a function object. I assume from the documentation that you would do something like this, yet I'm not too sure: class RandNumGen{public:RandNumGen(){srand( unsigned ( time(0) ) ); // shouldn't really be here, as it is called every time an object is constructed}int operator()(int N){return rand() % N;}}; ... std::string RandomOrder( const std::string& input ); ... std::string RandomOrder( const std::string& input ){    std::stringstream ss(input);    std::istream_iterator<std::string> beg(ss), end;std::vector<std::string> tokens( beg, end );    RandNumGen rng;    std::random_shuffle( tokens.begin(), tokens.end(), rng );    std::stringstream result_ss;    std::copy( tokens.begin(), tokens.end(),std::ostream_iterator<std::string>( result_ss, " " ) );// if you want to remove the last character (space)    std::string result( result_ss.str() );    result.erase( result.end() - 1 );// hax :/return result;// else you would merely use: `return result_ss.str();'} [ Google || Start Here || ACCU || STL || Boost || MSDN || GotW || MSVC++ Library Fixes || BarrysWorld || E-Mail Me ] [edited by - Lektrix on August 17, 2003 1:38:41 PM]