| Topic: |
DEVELOP > c-Plus-Plus |
| User: |
"Stefano Sabatini" |
| Date: |
17 Jan 2008 05:02:28 AM |
| Object: |
[NEWBIE] from C string to std::string |
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)
.
|
|
| User: "Stefano Sabatini" |
|
| Title: Re: [NEWBIE] from C string to std::string |
17 Jan 2008 05:41:32 AM |
|
|
On 2008-01-17, Stefano Sabatini <stefano.sabatini@caos.org> 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::ostringstream 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)
.
|
|
|
| User: "anon" |
|
| Title: Re: [NEWBIE] from C string to std::string |
17 Jan 2008 05:51:37 AM |
|
|
Stefano Sabatini wrote:
On 2008-01-17, Stefano Sabatini <stefano.sabatini@caos.org> 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::ostringstream 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" );
.
|
|
|
| User: "Stefano Sabatini" |
|
| Title: Re: [NEWBIE] from C string to std::string |
17 Jan 2008 06:09:03 AM |
|
|
On 2008-01-17, anon <anon@no.no> wrote:
Stefano Sabatini wrote:
On 2008-01-17, Stefano Sabatini <stefano.sabatini@caos.org> 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::ostringstream 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)
.
|
|
|
| User: "Linonut" |
|
| Title: Re: [NEWBIE] from C string to std::string |
17 Jan 2008 11:45:24 AM |
|
|
* 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
.
|
|
|
|
|
|
|
| User: "Jim Langston" |
|
| Title: Re: [NEWBIE] from C string to std::string |
17 Jan 2008 08:24:41 PM |
|
|
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
tazmaster@rocketmail.com
.
|
|
|
|
| User: "Bo Persson" |
|
| Title: Re: [NEWBIE] from C string to std::string |
17 Jan 2008 12:49:50 PM |
|
|
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
.
|
|
|
| User: "Juha Nieminen" |
|
| Title: Re: [NEWBIE] from C string to std::string |
22 Jan 2008 06:14:00 AM |
|
|
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";
.
|
|
|
|
| User: "Richard Herring" |
|
| Title: Re: [NEWBIE] from C string to std::string |
22 Jan 2008 05:49:11 AM |
|
|
In message <5v9ma0F1kefs9U1@mid.individual.net>, Bo Persson <bop@gmb.dk>
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
.
|
|
|
|
|

|
Related Articles |
|
|