Почему размер строки не изменяется, если я добавляю в нее дополнительный символ? - PullRequest
0 голосов
/ 04 декабря 2018

В приведенной ниже программе, когда я добавляю еще один символ в строку, его размер остается прежним (как видно из функции str1.size ()).Почему это так?

#include <iostream>
#include <cstring>

using std::cout;
using std::endl;

int main() {

        std::string str1 = "hello";
        cout << "std::string str1 = \"hello\""<< endl;

        cout << "string is " << str1 << " with length " << str1.size() << endl;

        str1[5] = 'a';


        cout << "string is " << str1 << " with length " << str1.size() << endl;

   for (int i = 0 ; i < 7; i++) {
                cout << "str["<<i<<"] = " << str1[i] << " (int)(str[i])" << (int)str1[i] << endl;
        }
}

Вывод

std::string str1 = "hello"
string is hello with length 5
string is hello with length 5 //expected 6
str[0] = h (int)(str[i])104
str[1] = e (int)(str[i])101
str[2] = l (int)(str[i])108
str[3] = l (int)(str[i])108
str[4] = o (int)(str[i])111
str[5] = a (int)(str[i])97
str[6] =  (int)(str[i])0

1 Ответ

0 голосов
/ 04 декабря 2018

Operaton str1[5] = 'a'; не «добавляет» что-либо в строку;он устанавливает значение в определенной позиции, и позиция должна находиться в диапазоне 0..(length()-1);В противном случае поведение не определено.

Чтобы добавить что-либо в строку, используйте

str1 += "a";

или

str1.push_back('a');

Обратите внимание, что std::string - в отличие отпростые строки в стиле "C" - поддерживают length в отдельном свойстве (и не вычисляют его исключительно на основе символа окончания строки '\0').

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