2014-10-17 3 views
0

Я хочу ввести пронумерованные объекты в массив. Каждый элемент объекта должен быть пронумерован в зависимости от его положения в массиве. Я не могу понять, почему индекс строки сохраняет предыдущие значения, когда он преобразуется по мере продолжения цикла. Например, . Первое место - 0, и по мере того, как цикл продолжается, он становится 01, 012,и так далее. вот что часть кода у меня есть проблемы сПреобразование из int в строку

stringstream convert; 
    int N; 
    int k; 
srand ((long) 123456); 
N=rand()%100+1; 
NewTable=new Employee[N]; 


for(k=0;k<N;k++){ 
    string name,surname,number=""; 
    convert<<k; 
    number=convert.str(); 
    cout<<number; 
    name="John_"+number; 
    surname="John_"+number; 
    NewTable[k].SetEmployee(name,surname,13*k,3*k);*/ 

}

Я также думал, что переинициализация строку числа в начале цикла он будет решать эту проблему, но Бесполезный «т.

ответ

0

Вы не clearing the stringstream buffer и, таким образом, добавляя материал к нему на каждой итерации

for (k = 0; k<N; k++){ 
    string name, surname, number = ""; 
    convert.str(""); // You should reset its contents 
    convert << k; 
    number = convert.str(); 

Edit: или, как отметил Джеймс, это могло бы быть лучше, чтобы повторно создать stringstream каждый раз, если есть более активное участие (Кроме того, вы только отправил фрагмент кода):

for (k = 0; k<N; k++){ 
    string name, surname, number = ""; 
    std::ostringstream convert; 
    convert << k; 
    number = convert.str(); 
+0

Это не 100% конечно; в потоке больше состояния, чем в потоке. Лучшее решение - просто создать новый 'std :: ostringstream' каждый раз в цикле. –

+0

Я решил создать новый std :: ostringstream в каждом цикле. Спасибо вам за ваши ответы –

0

Если вы хотите девственной std::ostringstream каждый раз в цикле, то просто создать новый каждый раз в цикле. Хотя теоретически вы можете сбросить все, чтобы вернуть поток в девственное состояние, это далеко не тривиально и не обязательно на 100% уверен. Проще всего просто:

for (int k = 0; k < N; ++k) { 
    std::ostringstream convert; 
    convert << k; 
    std::string number = convert.str(); 
    // ... 
} 

(Как правило, это лучше не определить переменную, пока не нужно, и инициализировать его непосредственно в определении.)

Смежные вопросы