我想将数字对象输入数组。每个对象的元素都必须根据其在数组上的位置进行编号。我无法弄清楚为什么字符串索引在循环继续时转换时保留先前的值。 例如。第一个位置是0,随着循环继续,它变为01,012,0123,依此类推。 这是我遇到问题的那部分代码
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 :(得分: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();
编辑:或者,正如詹姆斯指出的那样,每次重新创建字符串流可能会更好,如果涉及更多(此外你只发布了一段代码):
for (k = 0; k<N; k++){
string name, surname, number = "";
std::ostringstream convert;
convert << k;
number = convert.str();
答案 1 :(得分:0)
如果你想在循环中每次都有std::ostringstream
,那么每次在循环中创建一个新的。{虽然从理论上讲,你可以重置一切以使流回到处女状态,但它远非琐碎,并不一定100%肯定。最简单的只是:
for ( int k = 0; k < N; ++k ) {
std::ostringstream convert;
convert << k;
std::string number = convert.str();
// ...
}
(作为一般规则,最好不要在你之前定义变量 需要它,并在定义中立即初始化它。)