Нужно напечатать строку после некоторого назначения. Но вывод пустой. В чем ошибка? - PullRequest
2 голосов
/ 01 октября 2019

Мне нужно напечатать «ac» в качестве вывода. Но это ничего не печатает. В чем ошибка?

#include<iostream>
#include<string>

using namespace std;

int main()
{
    string x;
    x[0]='a';
    x[1]='c';
    x[2]='\0';
    cout<<x<<endl;
    return 0;
}

Ответы [ 2 ]

3 голосов
/ 01 октября 2019

Программа имеет неопределенное поведение, потому что вы не можете использовать оператор индекса для присвоения значений пустой строке.

Также назначение нулевого символа является избыточным.

x[2]='\0';

Запускиз C ++ 11 завершающий ноль автоматически добавляется к объектам типа std::string. Например, этот фрагмент кода

string x;

std::cout << static_cast<int>( x[x.size()] ) << '\n';

действителен и будет выведен 0.

Вы можете написать вместо

string x;

x += 'a'; // it is the same as x.push_back( 'a' );
x += 'c';

cout<<x<<endl;

Или вы можете просто инициализировать строкунапример

string x = { 'a', 'c' };

или используйте присваивание

string x;
x = { 'a', 'c' };

Если вы хотите использовать оператор индекса, вам нужно создать строку с необходимым количеством элементов, например

string x( 2, ' ' );
x[0] = 'a';
x[1] = 'c';
cout<<x<<endl;
1 голос
/ 01 октября 2019

Строка x имеет размер ноль при инициализации. Это означает, что нет компонентов, которые хранятся в строке. Установка компонентов, которые не существуют, очевидно, не работает, также это не добавляет новый элемент.

Вы можете использовать функцию push_back для добавления элементов в строку.

...