I want to construct a std::string object like an array:
std::string str("");
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
str[4] = '\0';
std::cout<<str;
But it doesnt print the string. What am i missing?
Firstly, std::string is not a C-string. You do not need to NULL-terminate it. Secondly, the [] operator is only valid for indices which are < std::string::length(), meaning that at least N elements must be allocated in advance before you can access an element between 0 and N-1.
std::string str(4); // construct a string of size 4
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
std::cout << str;
Edit: But also see Johnsyweb's answer. The big advantage of std::string over C-strings is that you don't have to worry about memory allocation. You can use the += operator or push_back member function, and can build the string character-by-character without worrying about how much memory to reserve.
'\0' (instead of the space). It is up to you to determine whether you prefer uninitialized elements to be spaces or NUL characters.Try
std::string (4, ' ');
instead of
std::string("");
basic_string's operator[] returns a reference to the specified character, but since your string is empty, it contains no characters.
char would both represent a character and behave as an integer...What am i missing?
You are missing the whole point of using a std::string. That approach may work for arrays of char, but not for strings.
Consider std::string::operator += instead.
char array.You allocated the string to be "", that is, exactly 0 bytes long.
You are then trying to write chars outside of bounds of the string - which doesn't work.
resize() that will, well, resize the string so you can make it grow.you should create a space in the memory for your array
using namespace std;
char str[5];
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
str[4] = '\0';
cout << str ;