0

我正在尝试使用以下代码将 2D int 数组输出到字符串中:

string sGrid;

for(int a=0;a<6;a++){  
  for(int b=0;b<7;b++)
    sGrid+=grid[a][b]+"\t";
  sGrid+="\n";
}

当我将此字符串打印到 cout 时,我得到这些随机字符:

_
.txttxtxtt
¨€+'*€+'*+'*'*'**
*

网格填充:

count=1;
for(int a=0;a<6;a++){
  if(bStart){
    for(int b=dayOfWeek;b<7;b++){
      grid[a][b]=count;
      count++;
    }
  }
  else{
    for(int b=0;b<7;b++){
      grid[a][b]=count;
      count++;
      if(count>=numOfDays)
        break;
    }
  }
  bStart=false;
  if(count>=numOfDays)
    break;
}

在这里找到完整的源代码:源代码

4

2 回答 2

1

@0x499602d2 的评论是正确的,但我认为用 C++ 做到这一点的惯用方法是使用字符串流:

#include <sstream>

std::ostringstream strBuilder;

for(int a=0; a<6; a++) {  
  for(int b=0; b<7; b++) {
    strBuilder << grid[a][b] << '\t';
  }
  strBuilder << '\n';
}

const std::string sGrid = strBuilder.str();

stringstreams 以对性能更友好的方式增长(指数,而不是线性),因此除了更正确之外,这应该更快。您的旧代码(根据 0x499602d2 的注释进行更正时)会导致缓冲区不断重新分配,大到足以容纳字符串内容的“当前迭代”,而不是像字符串流那样预期增长。

于 2013-05-25T03:48:55.940 回答
0

正如有人在评论中提到的那样,这是因为您正在添加不应该添加在一起的类型。试试这个:

string sGrid;

for(int a=0;a<6;a++){  
  for(int b=0;b<7;b++){
    sGrid+=grid[a][b];
    sGrid+="\t";
  }
  sGrid+="\n";
}
于 2013-05-25T03:48:48.820 回答