Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中将字符串拆分为整数数组_C_Arrays_String - Fatal编程技术网

在C语言中将字符串拆分为整数数组

在C语言中将字符串拆分为整数数组,c,arrays,string,C,Arrays,String,我在一个C应用程序中有一个逗号分隔的字符串,我要把它拆分成一个整数值数组。 字符串可以包含任意数量的逗号分隔值,因此我也没有数组的初始大小 e、 g 我想做一些像 int parsedArray[] = parseString("345,3345,35,75,52,386"); 这对java或c来说是一件轻而易举的事,但我认为我对c有点不了解。 关于如何实现这一点有什么想法吗?我将研究C函数,并使用它来迭代字符串并提取每个元素。用于将每个元素解析为整数。我将查看C函数,并使用它迭代字符串并提取

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

e、 g

我想做一些像

int parsedArray[] = parseString("345,3345,35,75,52,386");
这对java或c来说是一件轻而易举的事,但我认为我对c有点不了解。
关于如何实现这一点有什么想法吗?

我将研究C函数,并使用它来迭代字符串并提取每个元素。用于将每个元素解析为整数。

我将查看C函数,并使用它迭代字符串并提取每个元素。用于将每个元素解析为整数。

是指向字符串的指针

int parsedArray[1024];                                                     
int nb = 0;

while (nb < sizeof(parsedArray) && *p) {                                   
    parsedArray[nb++] = strtol(p, &p, 10);                                 
    if (*p != ',')                                                         
        break;                                                             
    p++; /* skip, */                                                       
}
nb是已解析的int数,它是指向字符串的指针

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语言中,不可能使用文章中暗示的签名函数,因为函数无法返回动态大小的数组。这里有两种选择:

将数组和最大计数传递到parseString中,或 返回表示动态分配数组的指针及其实际大小。 第一种方法将数组的大小限制为调用者建立的某个数字;第二种方法需要在处理完阵列后释放它

遵循第一种方法的函数如下所示:

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}
遵循第二种方法的函数如下所示:

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}
或者像这样:

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}
第二种情况可用于结合这两种方法,尽管API会变得不那么直观

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

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}

在C语言中,不可能使用文章中暗示的签名函数,因为函数不能返回动态大小的数组。这里有两种选择:

将数组和最大计数传递到parseString中,或 返回表示动态分配数组的指针及其实际大小。 第一种方法将数组的大小限制为调用者建立的某个数字;第二种方法需要在处理完阵列后释放它

遵循第一种方法的函数如下所示:

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}
遵循第二种方法的函数如下所示:

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}
或者像这样:

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}
第二种情况可用于结合这两种方法,尽管API会变得不那么直观

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

void parseString(int data[], size_t maxSize);
int *parseString(size_t *actualSize);
void parseString(int ** data, size_t *actualSize);
char *end = str;
while(*end) {
    int n = strtol(str, &end, 10);
    printf("%d\n", n);
    while (*end == ',') {
        end++;
    }
    str = end;
}