我的标题有点令人困惑,但我正在尝试编写一个循环,它将改变81个不同名称的数组中的值。我想要使用值或值数组启动数组。这是我的数独求解器代码的一部分,因为我认为我没有很好地解释它。
int cell1[], cell2[9], cell3[9],cell4[9]......cell81[9]; // <-- this will make 81 cells with an array that can hold a possible of 9 candidates
cout << "User input: << endl; // lets use ...1.5...14....67..8...24...63.7..1.9.......3.1..9.52...72...8..26....35...4.9...
// as an example
假设我将该输入存储到Char数组中,并且我将使用循环来决定是否启动给定值或'。'作为一个空值。
对于空值,我希望用1-9值初始化数组。我可以使用此代码轻松完成此操作。
If( ( (int)charArray[ 0 ] - 48) > 0 ) { // type cast to int. Neg = initialize array with 1-9
// pos = initialize with original value
cell1[ 0 ] = (int)charArray[ 0 ] - 48;
} else {
cell1[ 9 ] = { 1,2,3,4,5,6,7,8,9};
}
我想避免为81个单元格编写此代码81次(被视为编写垃圾代码)。我无法弄清楚如何编写循环。我愿意接受有关如何使用类,函数等对此进行编码的建议。提前感谢。
答案 0 :(得分:3)
将cell
数组创建为一个包含81行和9列的二维数组。
int cell[81][9];
现在,您可以使用语法cell[r][c]
循环遍历它们。例如,
for( i = 0; i < 81; ++i ) {
cell[i][0] = 1;
// ...
cell[i][8] = 9;
}
如果您更愿意避免使用二维数组,可以将数组声明为一维数组,并恰好将其索引。
int cell[81 * 9];
for( i = 0; i < 81; ++i ) {
cell[i + 0*81] = 1;
// ...
cell[i + 8*81] = 9;
}
答案 1 :(得分:1)
int a1[9],a2[9],a3[9],a4[9],...
void init_array(int *ptr, const char *chr, int len, int start){
for(int i = start; i < len; i++){
if(chr[i] == '.')continue;
ptr[i] = chr[i]-'0';//converts character to integer.
}
}
int main(int argc, char **argv)
{
std::string str;
cin >> str;
init_array(a1,str.c_str(),9,0); init_array(a2,str.c_str(),9,9/*increment by 9*/);...
//..
return 0;
}
编写一个名为init_array()
的函数,它接受一个整数指针并为您初始化数组。您可以避免以这种方式复制代码。