Connecting Tech Pros Worldwide Help | Site Map

istringstream to bool

  #1  
Old July 19th, 2005, 05:37 PM
Agent Mulder
Guest
 
Posts: n/a
I try to remove the spaces from a string
using an old trick that involves an
istringstream object. I expect the while-condition
while(istringstream>>string) to evaluate to
false once the istringstream is exhausted, but
that is not the case. What am I missing?

#include<iostream>
#include<sstream>
#include<string>
static std::string s="Asymmetric Beards, \
Not Even Punk Rockers Have One!";
int main(int,char**)
{
std::istringstream a(s);
std::string b;
while(a>>b)std::cout<<b.c_str();
return 0;
}
.......
output
AsymmetricBeards,NotEvenPunkRockersHaveOne!One!One !One!One!One!One!...

-X


  #2  
Old July 19th, 2005, 05:37 PM
John Harrison
Guest
 
Posts: n/a

re: istringstream to bool



"Agent Mulder" <mbmulder_remove_this_@home.nl> wrote in message
news:bi7oot$r6p$1@news3.tilbu1.nb.home.nl...[color=blue]
> I try to remove the spaces from a string
> using an old trick that involves an
> istringstream object. I expect the while-condition
> while(istringstream>>string) to evaluate to
> false once the istringstream is exhausted, but
> that is not the case. What am I missing?
>
> #include<iostream>
> #include<sstream>
> #include<string>
> static std::string s="Asymmetric Beards, \
> Not Even Punk Rockers Have One!";
> int main(int,char**)
> {
> std::istringstream a(s);
> std::string b;
> while(a>>b)std::cout<<b.c_str();
> return 0;
> }
> ......
> output
> AsymmetricBeards,NotEvenPunkRockersHaveOne!One!One !One!One!One!One!...
>
> -X
>[/color]

Works for me, maybe your STL is bugged?

john


  #3  
Old July 19th, 2005, 05:37 PM
Ivan Vecerina
Guest
 
Posts: n/a

re: istringstream to bool


"Agent Mulder" <mbmulder_remove_this_@home.nl> wrote in message
news:bi7oot$r6p$1@news3.tilbu1.nb.home.nl...[color=blue]
> I try to remove the spaces from a string
> using an old trick that involves an
> istringstream object. I expect the while-condition
> while(istringstream>>string) to evaluate to
> false once the istringstream is exhausted, but
> that is not the case. What am I missing?[/color]
....[color=blue]
> std::istringstream a(s);
> std::string b;
> while(a>>b)std::cout<<b.c_str();[/color]

I believe this loop shall end once EOF is reached.
And it does on the compiler I tested.
Might be a compiler/library bug?
Maybe try testing for the end condition explicitly:
while( a>>b && a.good() )

You may also want to step through the library's source
code to see what is happening...

hth - Ivan
--
http://www.post1.com/~ivec


  #4  
Old July 19th, 2005, 05:37 PM
Chris Theis
Guest
 
Posts: n/a

re: istringstream to bool



"Agent Mulder" <mbmulder_remove_this_@home.nl> wrote in message
news:bi7oot$r6p$1@news3.tilbu1.nb.home.nl...[color=blue]
> I try to remove the spaces from a string
> using an old trick that involves an
> istringstream object. I expect the while-condition
> while(istringstream>>string) to evaluate to
> false once the istringstream is exhausted, but
> that is not the case. What am I missing?
>[/color]
[SNIP]

What compiler are you using? The code works well with VC++ 6.0 (SP5) and gcc
2.96. I guess it might be a compiler problem because the following variation
will work on VC++ but not with gcc 2.96. Using gnu you'll get the last word
twice.

while( a ) {
a >> b;
cout << b;
}

Regards
Chris


  #5  
Old July 19th, 2005, 05:37 PM
Agent Mulder
Guest
 
Posts: n/a

re: istringstream to bool


AM >
#include<iostream>
#include<sstream>
#include<string>
static std::string s="Asymmetric Beards, \
Not Even Punk Rockers Have One!";
int main(int,char**)
{
std::istringstream a(s);
std::string b;
while(a>>b)std::cout<<b.c_str();
return 0;
}
.......
output
AsymmetricBeards,NotEvenPunkRockersHaveOne!One!One !One!One!One!One!...

CT> What compiler are you using? The code works well with VC++ 6.0 (SP5)
and gcc
CT> 2.96.

I use Borland 5.5.1. Note also that I use string.c_str() to
output the string with cout. Leaving c_str() out crashes
the computer. Compiler bogus?

-X


  #6  
Old July 19th, 2005, 05:37 PM
Ivan Vecerina
Guest
 
Posts: n/a

re: istringstream to bool



"Agent Mulder" <mbmulder_remove_this_@home.nl> wrote in message
news:bi7tfb$ar0$1@news3.tilbu1.nb.home.nl...[color=blue]
> CT> What compiler are you using? The code works well with VC++ 6.0 (SP5)
> and gcc
> CT> 2.96.
>
> I use Borland 5.5.1. Note also that I use string.c_str() to
> output the string with cout. Leaving c_str() out crashes
> the computer. Compiler bogus?[/color]

Compiler, or (maybe more likely) library implementation.
I would recommend asking about the issue on a forum dedicated
to the platform you use.

Alternatively, you could try using another C++ library implementation
with your compiler. Such as the free STLport (http://www.stlport.org/).

hth,
Ivan
--
http://www.post1.com/~ivec


  #7  
Old July 19th, 2005, 05:37 PM
White Wolf
Guest
 
Posts: n/a

re: istringstream to bool


Agent Mulder wrote:
[SNIP][color=blue]
> I use Borland 5.5.1. Note also that I use string.c_str() to
> output the string with cout. Leaving c_str() out crashes
> the computer. Compiler bogus?[/color]

Leaving out c_str should not crash anything. I was using the Borland free
command line (I guess the version you have said is around that) and these
things worked for me. Sorry for asking, but is this for real, or you just
wanted another chance to fire your beard joke?

--
WW aka Attila


  #8  
Old July 19th, 2005, 05:37 PM
Julián Albo
Guest
 
Posts: n/a

re: istringstream to bool


Agent Mulder escribió:
[color=blue]
> #include<iostream>
> #include<sstream>
> #include<string>
> static std::string s="Asymmetric Beards, \
> Not Even Punk Rockers Have One!";
> int main(int,char**)
> {
> std::istringstream a(s);
> std::string b;
> while(a>>b)std::cout<<b.c_str();
> return 0;
> }
> ......
> output
> AsymmetricBeards,NotEvenPunkRockersHaveOne!One!One !One!One!One!One!...[/color]

If the while condition is ever true, when the ouput is done?

Regards.
  #9  
Old July 19th, 2005, 05:37 PM
Agent Mulder
Guest
 
Posts: n/a

re: istringstream to bool


WW> Sorry for asking, but is this for real, or you just
WW> wanted another chance to fire your beard joke?

(-: It's for real. True, I do think that asymmetric beard business is
very funny, I read it first in a Larry Niven book, where the character was
overly concerned about his asymmetric beard. In a C++
context, I think it represents the two files needed to represent
one class. The .h file and the .cpp file are asymmetric but make
up one 'entity'. In a beard context, it means that it is diffucult to
wash and comb an asymmetric beard, let alone spray day-glow
glitters in it (maintaince). There is a website dedicated at the
asymmetric beard at:

http://www.halfbakery.com/idea/asymmetric_20beards


Closed Thread


Similar Threads
Thread Thread Starter Forum Replies Last Post
from std::string to std::istream? Gernot Frisch answers 4 July 23rd, 2005 03:09 AM
C++ istringstream problem James Aguilar answers 6 July 23rd, 2005 12:25 AM
istringstream class question Randy Yates answers 8 July 23rd, 2005 12:20 AM
istringstream syntax error question Donald Canton answers 1 July 22nd, 2005 06:57 AM