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