goldenmean
goldenmean

Reputation: 18966

C++ string char array

I am C++ beginner. I have a code as below

#include <iostream>
#include <string>
#include <iomanip>

using namespace std;
int main()
{
   char sym[] = "Audi.Despo";
   //string sym ("Audi.Despo");
    string rs(sym);
    //cout << rs << endl;
    rs = string(sym,4);

 cout << rs;

    return 0;
}

If the variable sym is a char array the final output of the string variable is Audi

but if the same variable sym is a string the final output is .Despo (the suffix is printed)

Whats the explanation.

Looks like the line

rs = string(sym,4);

changes its behaviour if its input is a char [] or a string.

Upvotes: 1

Views: 2290

Answers (3)

Omaha
Omaha

Reputation: 2292

When you say:

rs=string(sym, 4);

What you are doing is saying, "build me a std::string object, and I (the programmer) will help you (the program) do that by giving you this character array and a number." The code behind std::string class knows that in that instance, where it is given a character array and an integer, that it should take the number of characters indicated from the character array and construct a std::string using that content.

When you say:

string rs2=string(rs, 4);

What you are now doing is saying, "build me a std::string object, and I will help you do that by giving you this already existing std::string object and a number." The std::string class does something completely different in this case. When it receives those two arguments, it instead uses the number as place to start reading from the provided std::string.

These two different cases are two different constructors for the std::string class--they provide two different ways to build a std:string object based on the information you have available. You can easily make the second example work like the first by changing it to this form:

string rs2=string(rs, 0, 4);

Now you are telling it "initialize this new std::string (called rs2) by taking characters from the other std::string rs. I want you to start at the character at index 0 (so, the first) and take 4 characters after that--if they exist."

It is important to know, before you construct an object of a class, how the constructors behave. You can find documentation on all of the std::string constructors in many places online with some searches.

Author's note: It is noted that many other things are happening in this example (for example, the assignment operator) and many issues are glossed over, but given the self-stated beginner nature of this question, I felt it best to keep it high level.

Upvotes: 0

Mislav Blažević
Mislav Blažević

Reputation: 268

string ( const string& str, size_t pos, size_t n = npos );

Second argument in std::string's constructor is starting position of substring that is used to initialize content.

Upvotes: 0

Luchian Grigore
Luchian Grigore

Reputation: 258618

That's just the different implementations of two of the constructor overloads:

string ( const string& str, size_t pos, size_t n = npos );

Content is initialized to a copy of a substring of str. The substring is the portion of str that begins at the character position pos and takes up to n characters (it takes less than n if the end of str is reached before).

string ( const char * s, size_t n );

Content is initialized to a copy of the string formed by the first n characters in the array of characters pointed by s.

Upvotes: 4

Related Questions