我想将2d int数组传递给main函数。
由于主要功能签名是这样的
int main(int argc, char*argv[]
如何在代码中将2d数组放入int[][]
?
命令行:
myprogram {{2,3},{5,6},{4,5},{6,8},{2,5}}
答案 0 :(得分:5)
这:{{2,3},{5,6},{4,5},{6,8},{2,5}}
将以程序中的字符串结尾。您需要自己将其分解为多个数组。
答案 1 :(得分:0)
main()
函数不带任何内容或命令行参数为char *
s - 你不能随便给它任何东西!您必须解析char *
以获取所需的数据。
你是否必须以这种方式输入信息?如果它是这样输入的(只是通过cin
,而不是命令行参数:
1 2 3
4 5 6
7 8 9
您可以使用以下内容将其分配给int a[][]
:
int main()
{
const int X=3, Y=3;
int a[X][Y];
string currentLine;
for(int i = 0; i != X; ++i) {
getline(cin, currentLine);
istringstream currentInput(currentLine);
for(int j = 0; j != Y; ++j)
currentInput >> a[i][j];
}
return 0;
}
答案 2 :(得分:0)
您需要解析为程序提供的命令行输入。这可能会涉及到一点点。
你可以做的是 - 因为你知道那个阵列将是一个2D阵列。 传递命令行输入,如下所示:
myprogram<行数(r)> <列数(c)> n_1 n_2 n_3 .... n_(r * c)
其中n
是“行主要”方式的数组元素。
通过这种方式,您可以更简单地编写读取命令行输入的代码。
否则,如果要保留输入格式。您必须构建一个“小”解析器来读取这些输入。基本上你需要处理5种“字符”:
处理空间会有点棘手,因为命令行中的每个space
输入argc
都会增加一个。
修改强> 你可以遵循这些方针。 NB:此代码可能有错误,还需要检查一些逻辑,但这可以作为您开始以您给出的格式解析命令行输入的起点。
int main()
{
int count = 1;
std::vector<vector<int>> arr2d;
std::vector<int> arr1d;
std::string buf;
while(count<argc) {
//accumulate what all you get from command line into string
buf += argv[count];
count++;
}
std::string curr_num;
int num_elements;
int i = 0;
int lparen=0,rparen=0,nrows=0;
char c;
while(i<buf.length()){
c = buf[i];
switch(c) {
case '{':
lparen++;
break;
case '}':
rparen++;
nrows++;
arr2d.push_back(arr1d);
arr1d.clear();
break;
case ' ':
break;
case ',':
num_elements++;
if(curr_num.length() != 0) {
//i'm not sure this will work but you have to do something similar
arr1d.push_back((int)curr_num.c_str());
}
else {//do some error handling}
case '0':
//....
case '9':
curr_num += buf[i];
break;
default:
//throw error;
//there might be other checks you may feel like doing
//you'll get better idea as you start writing on your own.
}
i++;
}
if(lparen || rparen)
//throw error ...
//...
return 0;
}