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

时间:2015-04-12 11:35:01

标签: c arrays string

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

e.g。

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

并且喜欢做类似......

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

这在java或c#中都是轻而易举的但我认为在谈到C时我有点偏离我的深度。 有关如何实现这一目标的任何想法?

4 个答案:

答案 0 :(得分:2)

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

  • 将数组和最大数量传递到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;
}

Demo.

答案 1 :(得分:1)

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的数量

答案 2 :(得分:0)

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

答案 3 :(得分:0)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

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; 
}
相关问题