将字符串拆分为C中的整数数组

我在一个C应用程序中有一个逗号分隔的字符串,我正在将它拆分为一个整数值数组。 该字符串可以包含任意数量的逗号分隔值,因此我也没有数组的初始大小。

例如

"345,3345,35,75,52,386" 

并喜欢做类似……

 int parsedArray[] = parseString("345,3345,35,75,52,386"); 

在java或c#中这将是轻而易举的事情但是我认为在谈到C时我有点超出我的深度。有关如何实现这一点的想法?

在C中无法使用post中隐含的签名function,因为函数无法返回动态大小的数组。 这里有两种选择:

  • 将数组和最大计数传递给parseString ,或
  • 返回表示动态分配的数组的指针及其实际大小。

第一种方法将数组的大小限制为由调用者建立的某个数字; 第二种方法需要在完成后释放数组。

第一种方法后面的函数如下所示:

 void parseString(int data[], size_t maxSize); 

第二种方法后面的函数如下所示:

 int *parseString(size_t *actualSize); 

或者像这样:

 void parseString(int ** data, size_t *actualSize); 

第二种情况可用于组合这两种方法,尽管API会变得不那么直观。

至于解析本身,存在许多选项。 其中一个“轻量级”选项是使用strtol ,如下所示:

 char *end = str; while(*end) { int n = strtol(str, &end, 10); printf("%d\n", n); while (*end == ',') { end++; } str = end; } 

演示。

p是指向字符串的指针

 int parsedArray[1024]; int nb = 0; while (nb < sizeof(parsedArray) && *p) { parsedArray[nb++] = strtol(p, &p, 10); if (*p != ',') break; p++; /* skip, */ } 

nb是解析int的数量

我将查看C函数strtok()并使用它来遍历您的字符串并提取每个元素。 使用atoi()将每个元素解析为整数。

 #include  #include  #include  int main () { char str[] = "7,4200,4450, 500,1600, 500,550,600"; // Returns first token char *token = strtok(str, ","); int size=atoi(token); int signal[size]; int i=0; // Keep printing tokens while one of the // delimiters present in str[]. while (token != NULL) { printf("%s\n", token); token = strtok(NULL, ","); if(token !=NULL){ signal[i]=atoi(token); printf("%d --", signal[i]); i=i+1; } } return 0; }