Создание std :: string как массив - PullRequest
1 голос
/ 15 декабря 2010

Я хочу создать объект std :: string как массив:

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

Но строка не печатается.Чего мне не хватает?

Ответы [ 5 ]

9 голосов
/ 15 декабря 2010

Во-первых, std::string не является C-строкой. Вам не нужно NULL-прекратить его. Во-вторых, оператор [] действителен только для индексов < std::string::length(), что означает, что по крайней мере N элементов должно быть выделено заранее, прежде чем вы сможете получить доступ к элементу между 0 и 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;

Редактировать: Но также см. Ответ Джонсивеба . Большое преимущество std::string перед C-строками в том, что вам не нужно беспокоиться о распределении памяти. Вы можете использовать оператор += или функцию-член push_back и можете строить строку за символом, не беспокоясь о том, сколько памяти зарезервировать.

4 голосов
/ 15 декабря 2010

Попробуйте

std::string (4, ' ');

вместо

std::string("");

Оператор basic_string [] возвращает ссылку на указанный символ, но поскольку ваша строка пуста, она не содержит символов.

2 голосов
/ 15 декабря 2010

Чего мне не хватает?

Вам не хватает всего смысла использования std::string.Этот подход может работать для массивов char, но не для строк.

Вместо этого рассмотрим std::string::operator +=.

1 голос
/ 15 декабря 2010

Вы выделили строку как "", то есть длиной ровно 0 байтов.

Затем вы пытаетесь написать символы вне границ строки - что не работает.

0 голосов
/ 15 декабря 2010

вы должны создать место в памяти для вашего массива

using namespace std;

char str[5];

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

cout << str ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...