如何将数组从命令行转换为整数数组?

时间:2017-03-03 04:24:21

标签: c arrays command-line-arguments

我想知道如何转换{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[]){

3 个答案:

答案 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