像数组一样构造std :: string

时间:2010-12-15 08:49:31

标签: c++ string

我想像数组一样构造一个std :: string对象:

std::string str("");
str[0] = 'A';
str[1] = 'b';
str[2] = 'h';
str[3] = 'i';
str[4] = '\0';
std::cout<<str;

但它不会打印字符串。我错过了什么?

5 个答案:

答案 0 :(得分:9)

首先,std::string不是C字符串。您不需要NULL终止它。其次,[]运算符仅对< std::string::length()的索引有效,这意味着必须事先分配N个元素才能访问0和{{1}之间的元素}。

N-1

编辑:但也请看Johnsyweb's answerstd::string str(4); // construct a string of size 4 str[0] = 'A'; str[1] = 'b'; str[2] = 'h'; str[3] = 'i'; std::cout << str; 优于C字符串的一大优势是您不必担心内存分配。您可以使用std::string运算符或+=成员函数,并且可以逐个字符地构建字符串,而无需担心要保留多少内存。

答案 1 :(得分:4)

尝试

std::string (4, ' ');

而不是

std::string("");

basic_string的operator []返回对指定字符的引用,但由于您的字符串为空,因此它不包含任何字符。

答案 2 :(得分:2)

  

我缺少什么?

您错过了使用std::string的全部要点。这种方法可能适用于char的数组,但不适用于字符串。

请考虑std::string::operator +=

答案 3 :(得分:1)

您将字符串分配为“”,即长度恰好为0个字节。

然后你试图在字符串的边界之外写字符 - 这不起作用。

答案 4 :(得分:-1)

你应该在内存中为你的数组创建一个空间

using namespace std;

char str[5];

str[0] = 'A';    
str[1] = 'b';    
str[2] = 'h';    
str[3] = 'i';    
str[4] = '\0';

cout << str ;