istringstream to bool

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Agent Mulder

    istringstream to bool

    I try to remove the spaces from a string
    using an old trick that involves an
    istringstream object. I expect the while-condition
    while(istringst ream>>string) to evaluate to
    false once the istringstream is exhausted, but
    that is not the case. What am I missing?

    #include<iostre am>
    #include<sstrea m>
    #include<string >
    static std::string s="Asymmetric Beards, \
    Not Even Punk Rockers Have One!";
    int main(int,char** )
    {
    std::istringstr eam a(s);
    std::string b;
    while(a>>b)std: :cout<<b.c_str( );
    return 0;
    }
    .......
    output
    AsymmetricBeard s,NotEvenPunkRo ckersHaveOne!On e!One!One!One!O ne!One!...

    -X


  • John Harrison

    #2
    Re: istringstream to bool


    "Agent Mulder" <mbmulder_remov e_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(istringst ream>>string) to evaluate to
    > false once the istringstream is exhausted, but
    > that is not the case. What am I missing?
    >
    > #include<iostre am>
    > #include<sstrea m>
    > #include<string >
    > static std::string s="Asymmetric Beards, \
    > Not Even Punk Rockers Have One!";
    > int main(int,char** )
    > {
    > std::istringstr eam a(s);
    > std::string b;
    > while(a>>b)std: :cout<<b.c_str( );
    > return 0;
    > }
    > ......
    > output
    > AsymmetricBeard s,NotEvenPunkRo ckersHaveOne!On e!One!One!One!O ne!One!...
    >
    > -X
    >[/color]

    Works for me, maybe your STL is bugged?

    john


    Comment

    • Ivan Vecerina

      #3
      Re: istringstream to bool

      "Agent Mulder" <mbmulder_remov e_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(istringst ream>>string) to evaluate to
      > false once the istringstream is exhausted, but
      > that is not the case. What am I missing?[/color]
      ....[color=blue]
      > std::istringstr eam 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
      --



      Comment

      • Chris Theis

        #4
        Re: istringstream to bool


        "Agent Mulder" <mbmulder_remov e_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(istringst ream>>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


        Comment

        • Agent Mulder

          #5
          Re: istringstream to bool

          AM >
          #include<iostre am>
          #include<sstrea m>
          #include<string >
          static std::string s="Asymmetric Beards, \
          Not Even Punk Rockers Have One!";
          int main(int,char** )
          {
          std::istringstr eam a(s);
          std::string b;
          while(a>>b)std: :cout<<b.c_str( );
          return 0;
          }
          .......
          output
          AsymmetricBeard s,NotEvenPunkRo ckersHaveOne!On e!One!One!One!O ne!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


          Comment

          • Ivan Vecerina

            #6
            Re: istringstream to bool


            "Agent Mulder" <mbmulder_remov e_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
            --



            Comment

            • White Wolf

              #7
              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


              Comment

              • Julián Albo

                #8
                Re: istringstream to bool

                Agent Mulder escribió:
                [color=blue]
                > #include<iostre am>
                > #include<sstrea m>
                > #include<string >
                > static std::string s="Asymmetric Beards, \
                > Not Even Punk Rockers Have One!";
                > int main(int,char** )
                > {
                > std::istringstr eam a(s);
                > std::string b;
                > while(a>>b)std: :cout<<b.c_str( );
                > return 0;
                > }
                > ......
                > output
                > AsymmetricBeard s,NotEvenPunkRo ckersHaveOne!On e!One!One!One!O ne!One!...[/color]

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

                Regards.

                Comment

                • Agent Mulder

                  #9
                  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:




                  Comment

                  Working...