C ++ 2D int数组输出随机符号

时间:2013-05-25 03:33:53

标签: c++

我正在尝试使用以下代码将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;
}

此处的完整源代码:source code

2 个答案:

答案 0 :(得分:1)

@ 0x499602d2的评论是正确的,但我认为用C ++执行此操作的惯用方法是使用stringstreams:

#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的注释进行更正)会导致持续重新分配足够大的缓冲区,以便只保留字符串内容的“当前迭代”,而不是像字符串流那样预测增长。

答案 1 :(得分: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";
}