генерация строки в c++

Мне нужно сгенерировать строки из 10 разных символов, а потом их сортировать. На этапе генерации в цикле беру из symbols с помощью rand() символы и пытаюсь сложить в строку a. Но код прибавляет мне к 10 символам в конце всю строку алфавита, а в начале отображает неполную увеличивающуюся строку и при последующих компиляциях выводится одна и та же последовательность символов. Можете объяснить, в чем ошибки?

#include <iostream>
#include <string>
#include <cstdlib>

int main()
{
    char symbols[27]  = "abcdefghijklmnopqrstuvwxyz";
    char a[11] = {0};
    int random;
    int i;
    for (i = 0; i<11; i++) {
        random = rand()%(26);
        a[i] = symbols[random];
        puts(a);
    }
    std::cout << a << std::endl;
   return 0;
    }
l
lr
lrf
lrfk
lrfkq
lrfkqy
lrfkqyu
lrfkqyuq
lrfkqyuqf
lrfkqyuqfj
lrfkqyuqfjkabcdefghijklmnopqrstuvwxyz
lrfkqyuqfjkabcdefghijklmnopqrstuvwxyz
Program ended with exit code: 0
  • это фактический вывод

lrfkqyuqfj

  • это ожидаемый, но чтобы он в последующем состоял из постоянно меняющихся символов

Ответы (1 шт):

Автор решения: Harry

Замените

for (i = 0; i<11; i++) {

на

for (i = 0; i<10; i++) {

чтобы оставлять в конце нулевой символ, говорящий о конце строки...

P.S. Непринципиально, но смешение французского с нижегородским (puts и cout) оставляет не самое благоприятное впечатление...

→ Ссылка