从int到string的转换

Conversion from int to string

本文关键字:转换 string int      更新时间:2023-10-16

我想在数组中输入带编号的对象。每个对象的元素都必须根据其在数组中的位置进行编号。我不明白为什么字符串索引在循环进行时转换时会保留以前的值。例如第一位是0,随着循环的进行,它变成010120123,依此类推。这是我对有问题的代码部分

 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);*/

}

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

您没有清除字符串流缓冲区,因此在每次迭代时都会向其添加内容

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

编辑:或者,正如James所指出的,如果涉及更多内容,每次重新创建字符串流可能会更好(此外,您只发布了一段代码):

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

如果您希望在循环中每次都有一个原始的std::ostringstream,那么只需在循环中每一次创建一个新的即可。尽管从理论上讲,你可以重置一切,让流回到原始状态,但这绝非小事,也不一定是100%确定的。最简单的就是:

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

(一般来说,最好不要定义变量,直到您需要它,并立即在定义中初始化它。)