Re: any improvements for this programme
In article <pan.2007.07.18.08.28.23.597694@gmail.com>,
geek.arnuld@gmail.com says...
/* C++ Primer 4/e
* section 3.2 - String Standard Library
* exercise 3.8
* STATEMENT
* write a programme to read strings from standard input, concatenate
all of them * in one string where each input string is seperated by
whitespace and then print it. */
#include <iostream>
#include <string>
int main()
{
std::string input_string, final_string;
while(std::cin >> input_string)
if(final_string.empty()) // without "if" we will get a
whitespace
final_string += input_string; // at the beginning of final_string.
else
final_string = final_string + " " + input_string;
std::cout << final_string << std::endl;
return 0;
}
I'd generally do things a bit differently. Right now, you have a (mildly
messy) if statement in the inner loop. Unless it's crucial that there
NOT be an extra space after the final string, I'd just add a space after
the end of each string, which would simplify the code considerably.
Unless you're going to do something else with the data while it's stored
as a big string, I'd avoid using up the storage, and just copy data from
input to output, with padding added as necessary.
I'd consider using a standard algorithm instead of an explicit loop. The
first simplification (often) makes this step easier since it allows all
input to be treated uniformly.
Putting all those together gives a program that's quite a bit simpler,
but gives similar results:
#include <iostream>
#include <iterator>
#include <algorithm>
int main() {
std::copy(std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(std::cout, " "));
return 0;
}
To meet the original specification, we can use a stringstream instead of
copying directly to cout, and remove the extra space from the
intermediate string:
int main() {
std::ostringstream temp;
std::copy(std::istream_iterator<std::string>(std::cin),
std::istream_iterator<std::string>(),
std::ostream_iterator<std::string>(temp, " "));
std::string data = std::string(temp.str(),
0,
temp.str().length()-1);
std::cout << data;
return 0;
}
--
Later,
Jerry.
The universe is a figment of its own imagination.