从int转换为字符串

时间:2014-10-17 09:06:45

标签: c++ type-conversion

我想将数字对象输入数组。每个对象的元素都必须根据其在数组上的位置进行编号。我无法弄清楚为什么字符串索引在循环继续时转换时保留先前的值。 例如。第一个位置是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);*/

}

我还认为通过在循环开始时重新初始化数字的字符串,它将解决问题,但事实并非如此。

2 个答案:

答案 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();
    //  ...
}

(作为一般规则,最好不要在你之前定义变量 需要它,并在定义中立即初始化它。)