2015-01-28 2 views
0

У меня проблема с моей функцией, которая должна генерировать вектор случайных строк. Тем не менее, все, что я получаю, это первый элемент в векторе, является случайным, а остальное пустым. Вот код:Создание случайного вектора строк в C++

void losuj(vector <string> &vec, int ile){ 
    int i, j; 
    string str; 
    stringstream ss; 
    char c; 
    for(i=0; i<ile; i++){ 
     for(j=0; j<5; j++){ 
      c= rand()%25 + 97; 
      ss << c; 
     } 
     ss >> str; 
     vec.push_back(str); 
     ss.str().clear(); 
     str.clear(); 
    } 
} 

Любые мысли о том, что может быть неправильным?

+0

не 'ss.str()' просто вернуть строку, а не что-нибудь еще? вызывая 'clear' на том, что не будет делать слишком много, я думаю? – TankorSmash

+0

Потерять поток струн. он не нужен. локального 'str' внутри внешнего for-цикла с использованием' str.append (c) 'будет достаточно. И '' сделал бы это * много * чище, кстати. – WhozCraig

+0

Пожалуйста, используйте символьные литералы, такие как «А», вместо цифр, таких как 97. –

ответ

1

Прежде всего, как заявил WhozCraig, здесь не нужно использовать stringstream. std::string предоставляет все необходимое.

Причина, по которой ваш код не работает, заключается в том, что ваш eof bit был установлен через operator>>. Вызов stringstream::clear() сбрасывает бит и снова использует поток.

Вот ваш код с небольшими изменениями, работающий в порядке. Я также добавил исправления, предложенные Thomas Matthews:

void losuj(vector <string> &vec, int ile) 
{ 
    int i, j; 
    string str; 
    char c; 
    for(i=0; i<ile; i++) 
    { 
     for (j=0; j<5; j++) 
     { 
      c = rand() % 26 + 'A'; 
      str += c; 
     } 
     vec.push_back(str); 
     str.clear(); 
    } 
} 
+0

Работает как шарм, спасибо большое. Любая идея, почему моя версия не работает? – eilchner

+0

Я добавил некоторую информацию и ссылку на ответ для уточнения. – Daerst

+0

не забывайте про srand (время (NULL)), чтобы засеять ваш генератор. –

0

Вы должны сбросить состояние stringstream, потому что вы достигли eof:

ss.clear(); 
Смежные вопросы