我想知道如何转换{33,44,77,88}
或{10,20,30}
等数组,这些数组是作为命令行参数给出的,并将它们从char转换为整数,最后放入它们进入一个整数数组。
我一直在寻找几个小时,我找不到他们从命令行获取数组并将其转换为整数数组的示例。
这就是我在命令行FOO {33,44,77,88} {10,20,30}
我的前4行看起来像这样。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
答案 0 :(得分:2)
传入命令行参数会将它们作为字符串传递,而只传递字符串。因此,您的argv
数组将如下所示:argv = {"./prog", "FOO", "{33,44,77,88}", "{10,20,30}"};
。这意味着您的传入数组需要由程序解析才能将其转换为整数数组。尝试使用strtok
之类的函数来根据分隔符解析字符串。然后,一旦获得单个数字,即已解析“33”,就可以使用atoi
将此字符串转换为整数。您需要手动构建阵列。
答案 1 :(得分:1)
以下代码将解释以&#39; {&#39;并拉出任何以逗号分隔的数字。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
long int* processArray(char* input, int* lng){
int length = 0, i = 0;
while (input[i] != '\0'){
if (input[i] == ',') length ++;
i++;
}
if (length > 0) length ++;
input++;
int j = 0;
long int * out = malloc(length * sizeof(long int));
while(*input != '}'){
while(*input != '\0' && !isdigit(*input)) input++;
if (!isdigit(*input)) break;
out[j++] = strtol(input, &input, 10);
}
*lng = j;
return out;
}
int main(int argc, char ** argv){
int i;
for ( i = 0; i < argc; i++){
// check for variables that look like arrays
if (argv[i][0] == '{'){
printf("Processing '%s'\n", argv[i]);
int l, j;
long int * variables = processArray(argv[i], &l);
printf("Got Array: { ");
for (j = 0; j < l; j++){
printf("%ld%s", variables[j], j == l-1? "" : ", ");
}
printf(" }\n");
}
}
}
示例输出:
./array-args '{ 1, 2, 3 }'
Processing '{1, 2, 3}'
Got Array: { 1, 2, 3 }
答案 2 :(得分:-1)
我没有把你的问题理解为100%,但是你所提供的内容的实现将是这样的
args.cpp:
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
for (int i = 0; i < argc; ++i)
{
std::cout << argv[i] << std::endl;
}
return 0;
}
编译和输出:
〜/ c ++ practice&gt; g ++ args.cpp 〜/ C ++实践&GT; ./a.out {33,44,77,88} {10,20,30}
./ a.out的
33
44
77
88
10
20
30