2014-10-17 91 views
0

我想将编号的对象输入到数组中。每个对象的元素必须根据其在阵列上的位置进行编号。我无法弄清楚为什么字符串索引在循环继续时转换时保留了以前的值。例如, 。第一个地方是0,随着循环的进行,变成01,012,0123等等。 这里的那部分代码我有从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);*/ 

问题}

我还认为,通过在循环的开始重新初始化数字的字符串时,它会解决这个问题,但它没“T。

回答

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(); 

编辑附加的东西吧:或者,如詹姆斯指出,这可能是更好的每一次重新创建stringstream的,如果有更多的参与(此外,您只张贴的代码片段):

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

这是不是100%当然;比流中的状态更多。最好的解决方案是每次在循环中创建一个新的'std :: ostringstream'。 – 2014-10-17 09:17:43

+0

我决定在每个循环中创建一个新的std :: ostringstream。谢谢你的答案 – 2014-10-17 09:27:51

0

如果你想在循环处女std::ostringstream各一次,然后就创建一个新的每次循环。虽然从理论上讲,你可以重置所有东西以使流回到处女状态,但这并不是微不足道的,也不一定100%确定。最简单的就是:

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

(一般情况下,最好不要定义一个变量,直到你 需要它,而且在定义立即对其进行初始化。)