[NEWBIE] from C string to std::string

Discussion in 'C++' started by Stefano Sabatini, Jan 17, 2008.

  1. Hi guys,
    which is the best way to define a std::string using some C strings
    (arrays of chars)?

    Here it is the code:

    #include <iostream>
    #include <string>

    using namespace std;

    int main(void) {
    string s;
    // this won't even compile, since in this case "this is a" and
    // others string are interpreted like char arrays
    // s = "this is a" + " string.";

    // OK, but awkward
    s = string("this is a") + string(" string.");
    cout << s;

    // a better way??
    // s = ...

    return 0;
    }

    --
    Stefano Sabatini
    Linux user number 337176 (see http://counter.li.org)
    Stefano Sabatini, Jan 17, 2008
    #1
    1. Advertising

  2. On 2008-01-17, Stefano Sabatini <> wrote:
    > Hi guys,
    > which is the best way to define a std::string using some C strings
    > (arrays of chars)?
    >
    > Here it is the code:
    >
    > #include <iostream>
    > #include <string>
    >
    > using namespace std;
    >
    > int main(void) {
    > string s;
    > // this won't even compile, since in this case "this is a" and
    > // others string are interpreted like char arrays
    > // s = "this is a" + " string.";
    >
    > // OK, but awkward
    > s = string("this is a") + string(" string.");
    > cout << s;
    >
    > // a better way??
    > // s = ...
    >
    > return 0;
    > }


    Mmh..., it was very simple, reading another thread and FAQ-C++-lite
    then I finally found a satisfying solution:

    #include <iostream>
    #include <string>
    #include <sstream>

    using namespace std;

    int main(void) {
    string s;
    // this won't work, since in this case "this" are interpreted like char arrays
    // s = "this is a" + " string.";

    // OK, but awkward
    s = string("this is a") + string(" string");
    cout << s;

    // a better way??
    std::eek:stringstream o;
    int i=-1;
    o << "this is " << " a string " << "and this is a number: " << i << endl;
    cout << o.str();

    return 0;
    }

    for (int i=0; i < 10; i++)
    cout << "regards ";
    --
    Stefano Sabatini
    Linux user number 337176 (see http://counter.li.org)
    Stefano Sabatini, Jan 17, 2008
    #2
    1. Advertising

  3. Stefano Sabatini

    anon Guest

    Stefano Sabatini wrote:
    > On 2008-01-17, Stefano Sabatini <> wrote:
    >> Hi guys,
    >> which is the best way to define a std::string using some C strings
    >> (arrays of chars)?
    >>
    >> Here it is the code:
    >>
    >> #include <iostream>
    >> #include <string>
    >>
    >> using namespace std;
    >>
    >> int main(void) {
    >> string s;
    >> // this won't even compile, since in this case "this is a" and
    >> // others string are interpreted like char arrays
    >> // s = "this is a" + " string.";
    >>
    >> // OK, but awkward
    >> s = string("this is a") + string(" string.");
    >> cout << s;
    >>
    >> // a better way??
    >> // s = ...
    >>
    >> return 0;
    >> }

    >
    > Mmh..., it was very simple, reading another thread and FAQ-C++-lite
    > then I finally found a satisfying solution:
    >
    > #include <iostream>
    > #include <string>
    > #include <sstream>
    >
    > using namespace std;
    >
    > int main(void) {
    > string s;
    > // this won't work, since in this case "this" are interpreted like char arrays
    > // s = "this is a" + " string.";
    >
    > // OK, but awkward
    > s = string("this is a") + string(" string");
    > cout << s;
    >
    > // a better way??
    > std::eek:stringstream o;
    > int i=-1;
    > o << "this is " << " a string " << "and this is a number: " << i << endl;
    > cout << o.str();
    >
    > return 0;
    > }


    This doesn't corespond to what you asked, as you haven't mentioned
    numbers - only char arrays. I expected something like this:

    string s( "a very "
    "long "
    "string" );
    anon, Jan 17, 2008
    #3
  4. On 2008-01-17, anon <> wrote:
    > Stefano Sabatini wrote:
    >> On 2008-01-17, Stefano Sabatini <> wrote:

    [...]
    >> Mmh..., it was very simple, reading another thread and FAQ-C++-lite
    >> then I finally found a satisfying solution:
    >>
    >> #include <iostream>
    >> #include <string>
    >> #include <sstream>
    >>
    >> using namespace std;
    >>
    >> int main(void) {
    >> string s;
    >> // this won't work, since in this case "this" are interpreted like char arrays
    >> // s = "this is a" + " string.";
    >>
    >> // OK, but awkward
    >> s = string("this is a") + string(" string");
    >> cout << s;
    >>
    >> // a better way??
    >> std::eek:stringstream o;
    >> int i=-1;
    >> o << "this is " << " a string " << "and this is a number: " << i << endl;
    >> cout << o.str();
    >>
    >> return 0;
    >> }

    >
    > This doesn't corespond to what you asked, as you haven't mentioned
    > numbers - only char arrays. I expected something like this:
    >
    > string s( "a very "
    > "long "
    > "string" );


    Hi, yes indeed, though what I was trying to ask for was if that was
    possible to use a string in way similar to an iostream. sstream
    addresses this requirement.

    Thanks for your attention.

    Regards.
    --
    Stefano Sabatini
    Linux user number 337176 (see http://counter.li.org)
    Stefano Sabatini, Jan 17, 2008
    #4
  5. Stefano Sabatini

    Linonut Guest

    * Stefano Sabatini peremptorily fired off this memo:

    >> string s( "a very "
    >> "long "
    >> "string" );

    >
    > Hi, yes indeed, though what I was trying to ask for was if that was
    > possible to use a string in way similar to an iostream. sstream
    > addresses this requirement.
    >
    > Thanks for your attention.


    Don't forget about:

    s += "string value";

    --
    Intellect annuls Fate.
    So far as a man thinks, he is free.
    -- Ralph Waldo Emerson
    Linonut, Jan 17, 2008
    #5
  6. Stefano Sabatini

    Bo Persson Guest

    Stefano Sabatini wrote:
    > Hi guys,
    > which is the best way to define a std::string using some C strings
    > (arrays of chars)?
    >
    > Here it is the code:
    >
    > #include <iostream>
    > #include <string>
    >
    > using namespace std;
    >
    > int main(void) {
    > string s;
    > // this won't even compile, since in this case "this is a" and
    > // others string are interpreted like char arrays
    > // s = "this is a" + " string.";


    Adding two string literals together is done by the preprocessor. You
    just have to put them adjacent to each other, WITHOUT any operators:

    s = "this is a" " string.";


    Of course, why would you want to do this? :)


    Bo Persson
    Bo Persson, Jan 17, 2008
    #6
  7. Stefano Sabatini

    Jim Langston Guest

    Stefano Sabatini wrote:
    > Hi guys,
    > which is the best way to define a std::string using some C strings
    > (arrays of chars)?
    >
    > Here it is the code:
    >
    > #include <iostream>
    > #include <string>
    >
    > using namespace std;
    >
    > int main(void) {
    > string s;
    > // this won't even compile, since in this case "this is a" and
    > // others string are interpreted like char arrays
    > // s = "this is a" + " string.";
    >
    > // OK, but awkward
    > s = string("this is a") + string(" string.");
    > cout << s;
    >
    > // a better way??
    > // s = ...
    >
    > return 0;
    > }


    Only the first string has to be converted to a std::string. Consider.

    #include <string>

    int main()
    {
    std::string s1;
    s1 = "String1";
    s1 += "string2";

    std::string s2;
    s2 = std::string("String1") + "String2";

    std::string s3;
    s3 = std::string("String1") + "String2" + "String3" + "String4";
    }


    --
    Jim Langston
    Jim Langston, Jan 18, 2008
    #7
  8. In message <>, Bo Persson <>
    writes
    >Stefano Sabatini wrote:
    >> Hi guys,
    >> which is the best way to define a std::string using some C strings
    >> (arrays of chars)?
    >>
    >> Here it is the code:
    >>
    >> #include <iostream>
    >> #include <string>
    >>
    >> using namespace std;
    >>
    >> int main(void) {
    >> string s;
    >> // this won't even compile, since in this case "this is a" and
    >> // others string are interpreted like char arrays
    >> // s = "this is a" + " string.";

    >
    >Adding two string literals together is done by the preprocessor. You
    >just have to put them adjacent to each other, WITHOUT any operators:
    >
    >s = "this is a" " string.";
    >
    >
    >Of course, why would you want to do this? :)
    >


    One reason might be to embed comments:

    std::string angleExpression(
    "^\\s*" /* skip leading whitespace */
    "([-+]?)" /* exp1 is optional sign */
    "\\s*" /* skip whitespace */
    "(\\d*)" /* exp2 is integer degrees */
    "([:nsew])" /* exp3 is punctuation, maybe quadrant letter */
    "(\\d*)" /* exp4 is integer minutes */
    "[:']" /* punctuator between min & sec */
    "(\\d*)" /* exp5 is integer part of seconds */
    "[.,]?" /* maybe there's a decimal part */
    "(\\d*)" /* exp6 is fraction of seconds */
    "[:"]?" /* may be final punctuation */
    "\\s*" /* whitespace */
    "([nsew]?)" /* exp7 is quadrant letter */
    );

    --
    Richard Herring
    Richard Herring, Jan 22, 2008
    #8
  9. Bo Persson wrote:
    > s = "this is a" " string.";
    >
    > Of course, why would you want to do this? :)


    I use this quite a lot with strings which are longer than a
    reasonably-sized code line. I also often use it with multi-lined strings
    (ie. strings which have newlines in them), eg like this:

    s = "This is a long text with\n"
    "several lines using the\n"
    "newline character.\n";
    Juha Nieminen, Jan 22, 2008
    #9
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page